int main() {
char src[] = "santosh";
char dest[0];
strncpy(dest, src, 4);
printf("%s\n", dest); // expecting o/p "sant" but o/p was "santtosh"
int i = 0;
while (dest[i]) {
printf("%c", dest[i]); //expecting output "sant" but it was "santtosh"
i++;
}
printf("\n");
i = 0;
while (src[i]) {
printf("%c", src[i]); // expecting o/p "santosh" but it was "anttosh"
i++;
}
return 0;
}
У меня возникли проблемы с этим кодом, я запускаю код с помощью gcc-компилятора, и вот вывод, который я получил (раздел комментариев). Почему поведение не соответствует ожиданиям? почему strncpy()
способен копировать исходную строку, даже если dest buff недостаточно?Почему strncpy умеет копировать исходную строку, даже если буфер назначения равен нулю?
'символ Dest [0]' <- почти вся ваша программа неопределенное поведение в этой точке. То, что вы говорите с этим объявлением, состоит в том, что массив 'dest' является * фиксированным * размером 0 символов. Поэтому он никогда не может содержать ничего, и любой доступ к нему (чтение * или * запись) не определен. –
Назван в честь британской поп-группы ** UB40 ** ... Вы также должны рассмотреть возможность удаления тега 'C++'. –
Это неопределенное поведение. C позволит вам писать где угодно, и вам решать, нужно ли вам ... – Charles