私は入力中に入力文字列を動的に割り当てるために、ユーザーにいくつの文字が長いのかを尋ねることなく、次の関数を書いています。入力文字列の動的割り当て
#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);
*/
このコードは動作しますが、私はそれについていくつかの質問があります。
なぜそれが動作しませんの?
なぜ私はそれを実行すると、私はまた、Enterキーを押す前に文字を削除することはできません。getchar()
関数は、各繰り返しで1文字だけを読み込み、配列に書き込まれるので、いくつかの文字を削除するにはどうすればよいですか?
'\ 127'を受け取ったときにgetchar()
が前の文字を削除した場合、ループは他の文字と同じように実行されます。しかし、これは起こりません。なぜなら、ループが終了すると、「i」は常に要素の正確な数を含んでいるからです。私のコードは効率的ですか?そうでない場合は、どうすればよいでしょうか(組み込み関数を使用していても)?最初の質問のための