Добавление терминального нуля при использовании strncpy

Пишу код, который решает данную задачу: "На вход: две строки 1 строка: слова с разделителями 2 строка: сами разделители Вернуть максимальное по длине слово в 1 строке Пример «ABC_abcd_xyz» “-_,” Вывод «abcd»" Код:

char* func(char* s1, char* s2) {
    int curr_index = 0, max_index = 0;
    int curr_len = 0, max_len = 0;
    int flag = 0;
    int stop_sign = 0;
    int j = 0;
    int i = 0;
    for (i = 0; i < strlen(s1); i++) {
        for (j = 0; j < strlen(s2); j++) {
            if (s1[i] == s2[j]) {
                stop_sign = 1;
            }
        }
        if (flag == 0 && stop_sign != 1) {
            curr_index = i;
            curr_len++;
            flag = 1;
            if (curr_len > max_len) {
                max_len = curr_len;
                max_index = i;
            }
        }
        else if (flag == 1 && stop_sign != 1) {
            curr_len++;
            if (curr_len > max_len) {
                max_len = curr_len;
                max_index = curr_index;
            }
        }
        else {
            curr_index = i;
            curr_len = 0;
            flag = 0;
            stop_sign = 0;
        }
         
    }
    char result[30]; 
    strncpy(result, s1 + max_index, max_len);
    result[max_len] = '\0';
    return result;
}

int main() {
    char s1[20] = "ABC-abcd_xyz";
    char s2[3] = "-_";
    printf("%s", func(s1, s2)); 
    return 0;
}

Всё работает, но я не совсем понимаю, почему мы добавляем терминальный нуль для строки result. Разве после копирования подстроки из s1 в result компьютер сам не добавляет его автоматически?


Ответы (1 шт):

Автор решения: Harry

Смотрим описание:

char *strncpy( char *dest, const char *src, size_t count );

If count is reached before the entire array src was copied, the resulting character array is not null-terminated.

Вот на этот случай...

→ Ссылка