4

私のコードは次のようなものです:

#include <iostream>
using std::cout;
using std::endl;

int main(int argc, char *argv[])
{
    cout << (int)('\0') << endl;
    cout << (char)(0) << endl;
    return 0;
}

私はこのようなターミナルで見ることを期待していました:

$ test-program
0

$ 

しかし、私が見たものは次のようなものです。

$ test-program
0
^@
$

私を混乱させているのは、に'\0'変換できると思うこと0です。また0、にキャストすることもできます\0。null文字の後に。が続くことを期待していましたendlが、結果はのような奇妙なものになり^@ます。

誰かがこれについてアイデアを持っていますか?

4

4 に答える 4

12

^@ターミナルエミュレータがレンダリングする方法です'\0'

于 2013-02-10T07:12:16.167 に答える
7

^@null 文字の一般的な表現です。同様に、^Aは序数値 1^Gの文字、序数値 7 (ベル)^Mの文字、および序数値 13 (キャリッジ リターン) の文字を表すために使用されます。

cout << (char)0

整数表現ではなく、文字表現を印刷するだけです

于 2013-02-10T07:13:38.843 に答える
1

端末の出力を見ている場合、期待どおりに動作しないのがプログラムなのか、端末エミュレーターなのかわかりません。

UNIXoid システムでは、16 進出力./myProgram | hexdump -Cを表示するために使用します。このようにして、プログラムが期待どおりに動作することを確認します。したがって、(あなたの)期待どおりに動作しないのは端末です。

00000000  30 0a 00 0a                                       |0...|
00000004

私と同じ出力が表示される場合は、実際には zero '0'、 newline '\n'、 null '\0'、 newlineを出力しています'\n'。したがって、この場合、プログラムは期待どおりに動作します。

別の端末エミュレーターまたは設定を試してみることをお勧めします。

于 2013-02-10T07:33:29.433 に答える
0

にキャスト0charても は生成されません'0''\0'、整数型からキャストしてその ASCII コードでをchar作成することに注意してください。charつまり、基本的に、2 行目はヌル文字 (ASCII 0) を出力しています。

文字を出力したい場合は、 の'0'ようなことをする必要がありまし(char) 48た.48 はたまたま文字 0 の ASCII 値だからです.

于 2013-02-10T07:13:38.443 に答える