1

プログラムにこのコードがありますが、数字は出力されませんが、「((char)i)」の「i」を「a」などの通常の文字に切り替えると、出力されますコンソールに。

これがコンソールに出力されないのはなぜですか?

char debugStr[1000];
for(int i = 0; i < 1000; i++)
    {
        debugStr[i] = ((char)i);
    }
OutputDebugStringA(debugStr);

以下は、1000行の「a」を正常に出力します。

    char debugStr[1000];
    for(int i = 0; i < 1000; i++)
        {
            debugStr[i] = ((char)'a');
        }
    OutputDebugStringA(debugStr);
4

4 に答える 4

7

最初の文字の値はゼロです。

おそらく、OutputDebugStringA引数を C スタイルの文字列 (ゼロで終わる文字シーケンス) として解釈します。したがって、ゼロが見つかるまで文字を出力し続けます。この場合、それはすぐに起こるので、何も出てきません。

2 番目の例は、未定義の動作を示します。配列の末尾を切り詰めて、ゼロ値のバイトを見つけるか、読み取り不能なメモリ位置に到達してクラッシュするまで続行します。

于 2013-09-17T17:49:25.787 に答える
3

C では、文字列は null で終了します。最初の文字を 0 に設定しているため、文字列は空と見なされます。

23"23"(数値) は(文字列)とは非常に異なるものです。

于 2013-09-17T17:49:19.170 に答える
1

おそらく、0 から開始するため、何も出力されません。私はそれを32 <=と<= 127の間に保ちます

アスキー テーブルを参照してください: http://www.asciitable.com/

于 2013-09-17T17:52:17.453 に答える
0

2 つのこと、int i は null バイトである 0 から始まります。ほとんどの場合、これは印刷機能の終了文字になります。i がゼロ以外で開始しても印刷されない場合は、エンディアンを考慮する必要があります。リテ エンディアンでは、int は右から左に読み取られますが、char は左から右に読み取られるため、変換では int の左端のバイトのみが参照される可能性があります。

于 2013-09-17T19:41:18.687 に答える