В вашем коде вы модифицируете line
и word
. Когда вы делаете word++
, вы перемещаете указатель на один символ вперед, поэтому в конечном итоге вы печатаете только последний символ word
, то есть \0
, как вы только что его присвоили.
Чтобы сделать это правильно, самый простой способ - использовать вспомогательные переменные:
char *l, *w;
l = line;
w = word;
while(*l != ' ' && *l != '\0') {
*w = *l;
l++;
w++;
}
*w = '\0';
printf("%s\n", word);
Добавленная проверка для *l != '\0'
состоит в том, чтобы убедиться, что вы не читаете после конца line
в случае, если естьсимвол пробела не найден.
Другой вариант - использовать вспомогательную индексную переменную для доступа к двум строкам, таким как массивы, вместо использования других указателей:
size_t i;
for (i = 0; line[i] != ' ' && line[i] != '\0'; i++) {
word[i] = line[i];
}
word[i] = '\0';
printf("%s\n", word);