我寫了下面的函數來在輸入時動態分配輸入字符串,而不詢問用戶有多少字符。輸入字符串的動態分配
#include<stdio.h>
#include<stdlib.h>
char* dyninp (char str[], int *n) {
char ch;
int i = 0;
do {
ch = getchar();
str = (char *) realloc(str, (i+1)*sizeof(char));
str[i] = ch;
i++;
} while (ch != '\n');
/*substitute '\n' with '\0'*/
str[i-1] = '\0';
if (n != NULL) {
/*i contains the total lenght, including '\0'*/
*n = i-1;
}
/*because realloc changes array's address*/
return str;
}
/*it is called in this way:
char *a;
int n;
a = dyninp (a, &n);
*/
此代碼的工作,但我有一些關於它的問題:
爲什麼它的工作?
我不明白爲什麼,當我執行它時,我也可以在按下回車鍵之前刪除字符。getchar()
函數在每次迭代中只讀取一個字符,並將其寫入數組,所以如何刪除一些字符?
如果getchar()
在收到'\ 127'時刪除前一個字符,則該循環應該繼續執行,與其他任何字符一樣。但是這不會發生,因爲當循環結束時,「i」總是包含元素的確切數量。我的代碼是否有效?如果不是,我如何才能讓它變得更好(即使使用內置函數)?