ここで論理は間違っている:あなたは、実際にバッファのサイズを大きくしていない、とあなたもrealloc
の結果を破棄している
while((c = getchar()) != '\n') {
realloc(input, (sizeof(char)));
input[i++] = c;
}
。
試してみてください。
while ((c = getchar()) != '\n') {
// Note: you need one extra character for the terminator, so for the
// first char, when `i` is 0, then you need room for two `char`s in
// the buffer - one for the first input character and one for the
// terminator. And so on...
char * temp = realloc(input, i + 2); // NB: realloc can, and sometimes does, fail
if (temp == NULL) // if realloc failed then exit program
exit(1);
input = temp; // otherwise update input...
input[i++] = c;
}
また 、あなたは常にすべての文字にreallocを呼び出してしようとしているので、(ちなみに、非常に非効率的ですが、それは動作します)、この行:
input = (char *) malloc(sizeof(char));
input = NULL;
(これはC言語ではないので、キャストを持たないでください)
そして最後に1つのバグ:
char c;
は次のようになります。
int c;
EOF
のみ適切にint
として表すことができるので、そうでない場合は、あなたのwhile
ループは、終了しないことがあります。
だから、最終的に固定プログラムは、次のようなものになります。素晴らしい先生です
#include <stdio.h>
#include <stdlib.h>
int main(void) {
int i = 0;
int c;
char * input = NULL;
printf("Input a string, press ENTER when done: ");
while ((c = getchar()) != '\n') {
// Note: you need one extra character for the terminator, so for the
// first char, when `i` is 0, then you need room for two `char`s in
// the buffer - one for the first input character and one for the
// terminator. And so on...
char * temp = realloc(input, i + 2); // NB: realloc can, and sometimes does, fail
if (temp == NULL) // if realloc failed then exit program
exit(1);
input = temp; // otherwise update input...
input[i++] = c;
}
input[i] = '\0';
printf("\nYou've entered the string: %s\n", input);
return 0;
}
を。しかし、私はまだTLEを取得しています。 _while(c = getchar())!= '\ n'){_ _realloc(input、(sizeof(char))); _ _ input [i ++] = c; _ _} _ あなたと一緒に! –
上記の3つのバグ修正をすべて適用しましたか? –
いいえ、基本的に私はwhileループで1つだけを適用しました。 私はそれらのすべてを適用する必要がありますか? –