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

取消引用空指针是未定义的行为,这会comment产生空指针:

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;

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

你想const char * comment = "0";打印 0
你可以做什么const char * comment = ""; 来表示空字符串。


const char *是一个指针。当分配给它 0 时,它变成了一个空指针,因为它现在是一个指向空的指针。当您执行 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 回答