Добавление терминального нуля при использовании 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.
Вот на этот случай...