почему я не могу получить несколько пробелов в *? - PullRequest
0 голосов
/ 27 апреля 2020
int main()
{

    int input;
    printf("input lenth : \n");
    scanf("%d", &input);
    while(getchar()!='\n')
        continue;
    printf("input str : \n");
    char* sentence = (char*)malloc(sizeof(char) * input);
    fgets(sentence, sizeof(sentence), stdin);
    reverse(sentence, strlen(sentence));
    free(sentence);
    return 0;
}

Я узнаю, fgets может получить пробел.

, поэтому мне malloc достаточно места для sentence ex) 100

и я ввожу I am a boy

Но когда я печатаю свой sentence, он просто печатает I am a ...

в чем проблема?

Ответы [ 2 ]

2 голосов
/ 27 апреля 2020

Это утверждение

fgets(sentence, sizeof(sentence), stdin);

неверно. Кажется, вы имеете в виду

fgets(sentence, input, stdin);

В противном случае sizeof( sentence ) выдаст размер указателя, объявленный как

char* sentence = (char*)malloc(sizeof(char) * input);

Обратите внимание, что функция fgets может добавлять символ новой строки '\n' к введенной строке. Вы должны удалить его как

sentence[ strcspn( sentence, "\n" ) ] = '\0';
1 голос
/ 27 апреля 2020

Когда вы говорите:

fgets(sentence, sizeof(sentence), stdin);

Он дает вам размер указателя char, то есть 8 (зависит от используемой системы 32 и 64). Таким образом, вы можете получить 7 символов только тогда, когда fgets назначит символ '\ 0' последнему символу.

Таким образом, используйте длину, которую вы получили от пользователя, т.е. 100.

fgets(sentence, input, stdin);
...