我正在學習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:這就是爲什麼它是一個評論,而不是一個答案。 –