您可以使用 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;
我只是在试验,想知道为什么我的尝试不起作用(程序崩溃)。
#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;