我正在学习C编程,我必须实现一个读取未知大小输入字符串的程序。 我写了这个代码:这两种方法在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代码,它的工作原理!但我没有与我的区别。
我希望我自己清楚,谢谢你的关注。
请注意,一次增加字符串大小一个字节可能会导致性能下降。一般来说,你最好把字符串的大小加倍,或者在附近。如果它在结尾处显得太大(例如,你需要2048个字节的字符串,但只能使用1080字节),那么可以使用另一个'realloc()'将其缩小到最小。但这不太可能是一个主要问题。 –
@JonathanLeffler:虽然我同意你的评论,但是'realloc'方案的效率低下是OPs问题中最少的。 – chqrlie
@chqrlie:这就是为什么它是一个评论,而不是一个答案。 –