为什么我不能在 * 中获得多个空格?

why I can't get multiple spaces in *?

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可以得到space.

所以我 malloc 足够 space 到 sentence ex) 100

然后我输入I am a boy

但是当我打印 sentence 时,它只打印 I am a ...

有什么问题?

此声明

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

不正确。你的意思好像是

fgets(sentence, input, stdin);

否则sizeof( sentence )将产生一个指针的大小声明如

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

注意函数fgets可以在输入的字符串后面追加换行符'\n'。你应该删除它

sentence[ strcspn( sentence, "\n" ) ] = '[=13=]';

当你说:

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

它为您提供了指针字符的大小,即 8(取决于您使用的 32 和 64 系统)。 所以你只能收到 7 个字符,因为 fgets 将 '\0' 字符分配给最后一个字符。

因此,使用您从用户那里收到的长度,即 100。

fgets(sentence, input, stdin);