ポインタを使用してchar配列をその場で初期化したい、つまり、ユーザーが入力を行うと、配列のサイズがわからない。ユーザーは、returnキーが押されるまで入力を続ける。条件は次のとおりです。
- ポインタを使用して初期化する
- 事前に配列のサイズを渡さないでください。
ポインタを使用してchar配列をその場で初期化したい、つまり、ユーザーが入力を行うと、配列のサイズがわからない。ユーザーは、returnキーが押されるまで入力を続ける。条件は次のとおりです。
Cの質問を想定すると、(テストされていない)はどうですか?
char *arr = malloc(10);
size_t size = 10, index = 0;
int ch;
while ((ch = getc(stdin)) != EOF && ch != '\n' && ch != '\r') {
if (index >= size) {
size *= 2;
arr = realloc(arr, size); /* XXX check it first. */
}
arr[index++] = ch;
}
arr[index] = 0;
それが本当にC++の質問である場合はstd::getline
、を使用してstd::string
ください。
std :: stringには、push_back
std::vectorがジョブを実行するメソッドもあります。それでも、動的配列とcharポインターを使用する必要がある場合は、vectorで使用されるものと同様の再割り当て戦略を実装することをお勧めします。要素の数が現在のサイズよりも多くなるたびにサイズを2倍にします。