Буфер
char buffer[20];
имеет локальное хранилище. Он выделяется в стеке и освобождается, как только возвращается fWord
.
Вам необходимо выделить его извне (либо как глобальную переменную, либо как локальную переменную функции main
, передавая ее как новую параметр fWord
) или продолжайте выделение в пределах fWord
, но динамически (используя malloc ()
).
Кроме того, как правильно заметил @lurker в разделе комментариев, вызов
fgets(input, sizeof(input), stdin);
указывает fgets()
читать не более sizeof(input)
символов. Но на самом деле это будет размер char *
указателя, 4 или 8, в зависимости от вашей архитектуры.
В итоге ваша программа станет:
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define MAX_INPUT_LEN 20
char * fWord(void);
int main(void)
{
char *test = fWord();
if (test) //fWord might return a NULL pointer
{
printf("%s\n", test);
free(test);
}
return 0;
}
char * fWord(void) // ONLY READ THE FIRST WORD
{
char * input = malloc(MAX_INPUT_LEN);
if (input)
{
fgets(input, MAX_INPUT_LEN, stdin);
input[strcspn(input, "\r\n")] = 0; // REMOVES NEWLINE FROM GETLINE
input = strtok(input, " ");
}
return input;
}