我正在学习 C 编程,我必须实现一个程序来读取未知大小的输入字符串。 我写了这段代码:
int main() {
char *string;
char c;
int size = 1;
string = (char*)malloc(sizeof(char));
if (string == NULL) {
printf("Error.\n");
return -1;
}
printf("Enter a string:");
while ((c = getchar()) != '\n') {
*string = c;
string = (char*)realloc(string, sizeof(char) * (size + 1));
size++;
}
string[size - 1] = '\0';
printf("Input string: %s\n", string);
free(string);
return 0;
}
但是最后一个 printf
不显示整个字符串,只显示最后一个字符。
所以如果我输入 hello, world
最后一个 printf
打印 d
。
经过一些研究,我尝试了 this代码,它有效!但我不明白我的区别。
我希望我说清楚了,谢谢你的关注。
最佳答案
在您的代码版本中,您将新读取的字符 c
分配给 string
,使用:
*string = c;
*string
指向字符串的开头,因此您可以用新读取的字符替换字符串的第一个字符。
您链接到的代码执行以下操作:
str[i] = c
基本上,它使用索引i
将字符分配到字符串的末尾。
在您的代码版本中,您可以使用 size - 1
而不是 i
。
关于c - 这两种在C中获取字符串输入的方法有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34584089/