您可以使用 getchar() 从标准输入中读取可变长度的字符串吗

Can you read in a variable length string from standard input using getchar()

我只是在试验,想知道为什么我的尝试不起作用(程序崩溃)。

#include <stdio.h>
#include <stdlib.h>  
int main(int argc, char **argv)
{
    
    char *list;
    list =  (char*)malloc(sizeof(char));
    char a;
    int i = 0;
    
    while ( (a =getchar()) !='\n'){
        
        list[i]= a;
        list = (char*)realloc(list,sizeof(char));
        ++i;
       
    } 
    
    printf("%s",list);
    free(list);
    
    
    return 0;
}

sizeof(char) 始终为 1。您需要将其乘以列表的长度。

要跟踪列表的大小,最好使用 size_t 或整数,例如

list = (char*)realloc(list,sizeof(char)*(i+2));

正如@Ian Abbot 在评论中提到的,我们添加 2 而不是 1 来为空终止符腾出空间(如下)。

注意:我保留了您的代码风格,但请参阅您对原始问题的评论中的建议,不需要此转换。

你的循环之后你还需要一个空终止符。

...

    }
    list[i] = 0;