这里的评论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;
}
答案 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时,库会尝试访问该位置的内存,这个过程称为取消引用指针。这会导致崩溃,如下所述。
在C中取消引用空指针会产生未定义的行为,[5]这可能是灾难性的。但是,大多数实现[需要引用]只是暂停执行有问题的程序,通常是分段错误。
答案 3 :(得分:1)
const char * comment = 0;
等于
const char * comment = NULL;
如果您想打印字符0
,请尝试以下代码:
const char * comment = "0";
在标记c ++时,最好使用
std::string comment("0");