Введите имя: abc *** Обнаружено разрушение стека; завершено Прервано (ядро выгружено)
это потому, что в
scanf("%s",&name[10]);
вы просите scanf
записать после массива с неопределенным поведением
вы хотели
scanf("%s",&name[0]);
или более простой
scanf("%s",name);
Но если на входе более 9 символов, вы снова пишете другое неопределенное поведение после массива, поэтому лучше ограничить количество записанных символов, выполняющих:
scanf("%9s",name);
Я использую 9, чтобы оставить место нулевого символа, заканчивающего строку
В любом случае это еще не идеально потому что вы не обнаруживаете, что ничего не читается, например, потому что вы перенаправляете ввод в пустой файл, поэтому:
if (scanf("%9s",name) == 1) {
...
}
но, возможно, вы также хотели прочитать пробелы среди других символов, чтобы прочитать john doe например, в этом случае:
if (scanf(" %9[^\n]",name) == 1) {
...
}
обратите внимание на пробел перед '%', позволяющий обходить пробелы в начале ответа (но не в конце), если вы хочу, чтобы они удалили это пространство
* 1 036 *
Компиляция и выполнение:
pi@raspberrypi:/tmp $ gcc -Wall c.c
pi@raspberrypi:/tmp $ ./a.out
Enter name:abc
3
pi@raspberrypi:/tmp $ ./a.out
Enter name:jonh doe
8
pi@raspberrypi:/tmp $ ./a.out
Enter name:to long but cut
9
pi@raspberrypi:/tmp $
Обратите внимание, что в вашей функции length
переменные i и count всегда имеют одно и то же значение, поэтому достаточно одного