0

ここでは、comment2が完全に印刷されています。ここで、コメントは出力されず、プログラムはそのステートメントが実行されるとすぐに終了します。誰かが解決策を提供できますか?

#include <iostream>
int main()
{
   const char * comment = 0;
   const char * comment2 = "hello this is not empty";
   std::cout << std::endl;
   std::cout << comment2 << std::endl;
   std::cout << "printing 0 const char *" << std::endl;
   std::cout << comment << std::endl;
   std::cout << "SUCCESSFUL" << std::endl;
}
4

4 に答える 4

4

null ポインターの逆参照は未定義の動作であり、これによりcommentnull ポインターが作成されます。

const char * comment = 0;

空の文字列を次のように変更する場合:

const char* comment = "";

または使用std::string

std::string comment;
于 2013-01-10T08:11:31.437 に答える
2

ポインターを 0 に割り当てることは、NULL に割り当てることを意味します。文字 0 が必要な場合は、文字列 "0" に変更するか、空の文字列 "" に変更します。

const char * comment = "";
于 2013-01-10T08:09:32.587 に答える
1

std::cout << comment << std::endl;

が 0 の場合comment、これをセグメンテーション違反と呼び、壊滅的なクラッシュです。ここで何が起こるつもりですか?

do you want const char * comment = "0";to print 0 空の文字列を表現
することができます。const char * comment = "";


const char *ポインタです。0 が代入されると、null へのポインターになるため、null ポインターになります。cout を実行すると、ライブラリはその場所にあるメモリにアクセスしようとします。これは、ポインターの逆参照と呼ばれるプロセスです。これにより、以下で説明するようにクラッシュが発生します。

ウィキペディアより

C でヌル ポインターを逆参照すると、未定義の動作が発生し [5]、壊滅的な事態になる可能性があります。ただし、ほとんどの実装 [要出典] は、問題のプログラムの実行を単純に停止し、通常はセグメンテーション違反が発生します。

于 2013-01-10T08:10:17.457 に答える
1
const char * comment = 0;

に等しい

const char * comment = NULL;

文字を印刷したい場合は0、以下のコードを試してください:

const char * comment = "0";

C++ にタグを付けるときは、より適切に使用してください

std::string comment("0");

于 2013-01-10T08:10:33.323 に答える