Ваш scanf
вызов читает первый символ, а затем ваша read_word
функция перезаписывает его. Если вызов scanf
читает символ новой строки, он будет игнорироваться.
Строки:
p = (char*) malloc(nwords*sizeof(char));
p[i]= read_word(word, len);
... также выглядит неправильно. read_word
возвращает целое число (длина прочитанной строки), но вы сохраняете в массив char
. Кроме того, вы перераспределяете память для p
каждый раз в цикле, поэтому сохраненные ранее значения будут потеряны.
Исправить:
- измените
p
на int *
и инициализируйте его нулем
- изменить
malloc
вызов на подходящий realloc
- убрать звонок на
scanf
целиком
- переместить чек для
p == null
до присвоения `p = (char *) malloc (nwords * sizeof (char)); '
Или: p
означает массив строк (самих слов), а не длину слова? В этом случае вы должны:
- изменить
p
на char **
- изменить размер выделения (для вызова
realloc
) на nwords * sizeof(*p)
- выделить (используя
malloc
) память для каждого слова вместо того, чтобы word
был массивом, выделенным стеком
- установить
p[i] = word;
вместо текущего назначения.