2011-01-06 3 views
4

私は唯一のアドレスを参照してデバッグするとき、私はどのようにcharポインタ(C++)内のデータを印刷するのですか?

function(const char * data) 
{ 
//how to print the data which is inside the data 
} 

を持っています。私が印刷すると(*データ)何も印刷されません。

+2

'print'は標準のC++機能ではなく、デバッガの関数であれば、使用しているデバッガを指定する必要があります。 '* data'はアドレス' data'の最初の文字のみを参照します。その文字が制御文字であれば、印刷されないかもしれません。これは端末/コンソールソフトウェアによって異なります。 ASCIIZ表現の空文字列は単純に0値( '0'文字ではない)であり、おそらく有用には印刷されないことに注意してください。印刷(データ)を試みるかもしれませんが、自信を持って答えるためには、環境について十分に指定していません。 –

+0

彼がgdbについて話しているのだろうか? –

+1

使用しているデバッガを指定してください。 'print'コマンドからは、gdbを使用していると思います。もしそうなら、 'x'コマンドを試してください。これにより、メモリブロックの内容を印刷することができます。 – 341008

答えて

8
#include <iostream> 

void function(const char * data) 
{ 
    std::cout << data; 
} 
-1
std::cout << std::string(data); 
+4

これはstd :: cout <<とはどのように違いますか?データがintなので –

+0

! ! !:ポインタがあるということは整数であることを意味します。したがって、intを出力するように要求すると、intが出力されます。 –

+3

いいえポインタは、内部的に(多くの場合)平易な整数として表されていますが、ポインタです。 'cout << data'はそれが指し示すアドレスを出力しません**、それが指すヌル終端文字列を出力します。 'char *'は 'int'(または整数型)ではないので、' operator << 'の異なるオーバーロードを呼び出します。これはc文字列を出力する方法を知っています。 – delnan

3

printf("%s\n", data)です。

関連する問題