-1

文字配列を宣言した場合:char arr[200] その後、関数 cin を使用して値を読み取りarr[200] 、コマンド ウィンドウの行に abcd と入力します。

null で終了するものはありますか:\0入力の最後に配列に自動的に追加されますか?

(cin関数を使用してテストしたため、そうは思いません: cin>>abcd )

なぜ誰かが私にそれを説明できますか?

以下は、テストに使用するコードのスニペットです

    char arr[200]
    int count=0;
    int i=0;
    cin>>arr // i type into command window:abcd

    while (arr[i] != '\0')
    {
       count++;
        i++




    }

私のカウント値は4ではなく43のようになるため、cin関数の後に文字配列がnullで終了していないと結論付けました

4

2 に答える 2

3

aから文字配列へのフォーマットされstd::istreamた入力は、C ++ 11 27.7.2.2.3/9で指定されているように、入力をnullで終了します。

operator>>次に、ヌルバイト(charT())を次の位置に格納します

投稿したコードは、明らかな構文エラーが修正されると、期待される結果をもたらします。ただし、これは非常に危険であることに注意してください。配列の長さはチェックされないため、入力が多すぎるとオーバーフローします。std::string文字列の管理には、プレーンな文字配列ではなく、クラスを使用することを強くお勧めします。

リンクを介してコメントに投稿したコードは次のようになります。

char array[20];
int length=getlength(array);
cin>>array;

初期化されていない配列の文字列の長さを測定しようとした、配列を読み込みます。これにより、結果が得られたり、クラッシュしたり、その他の未定義動作の例が発生したりする可能性があります。

将来的には、質問に投稿するコードが、質問している動作を示すコードと同じであることを確認する必要があります。そうでなければ、質問に答えることは不可能です。

于 2012-12-06T14:23:25.463 に答える
0

はい、入力はゼロで終了します。そうしないと、たとえば、入力後にランダムな文字を印刷せずに印刷することはできません。

于 2012-12-06T13:48:18.763 に答える