无法打印char *指向0

时间:2013-01-10 08:08:09

标签: c++

这里的评论2完美打印。没有打印评论的地方和 程序在执行该语句后立即结束。 任何人都可以提供解决方案吗?

#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 个答案:

答案 0 :(得分:4)

取消引用空指针是未定义的行为,这使comment成为空指针:

const char * comment = 0;

如果您想要将空字符串更改为:

const char* comment = "";

或使用std::string

std::string comment;

答案 1 :(得分:2)

将指针指定为0意味着将其指定为NULL。如果你想要字符0,将它改为字符串,“0”或空字符串,“”。

const char * comment = "";

答案 2 :(得分:1)

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

comment为0时,我们将其称为分段错误,并且是灾难性的崩溃。你打算在这里发生什么?

您希望const char * comment = "0";打印0
您可以const char * comment = "";表示空字符串。


const char *是一个指针。当为它分配0时,它变为空指针,因为它现在是一个指向null的指针。当您执行cout时,库会尝试访问该位置的内存,这个过程称为取消引用指针。这会导致崩溃,如下所述。

来自Wikipedia

  

在C中取消引用空指针会产生未定义的行为,[5]这可能是灾难性的。但是,大多数实现[需要引用]只是暂停执行有问题的程序,通常是分段错误。

答案 3 :(得分:1)

const char * comment = 0;

等于

const char * comment = NULL;

如果您想打印字符0,请尝试以下代码:

const char * comment = "0";

在标记c ++时,最好使用

std::string comment("0");