繁体   English   中英

为什么我不能在 C++ 中构造一个带有 NULL char* 的字符串?

[英]Why can't I construct a string with a NULL char* in C++?

在 C++ 中,为什么下面的代码会抛出运行时错误? 有人可以为我解释一下吗?

char* p = NULL; 
string str(p); 

我在 VS2013 和 Codeblocks 中尝试过这个,但都出现了运行时错误。

构造函数string::string(const char *)要求参数指向以空字符结尾的字符数组的第一个元素。 您违反了该要求。

作为参考,[string.cons]:

 basic_string(const charT* s, const Allocator& a = Allocator());

要求: s指向至少包含traits::length(s) + 1charT元素的charT

(它是traits::length(s) )需要数组的空终止,参见 [char.traits.require]。)

字符串类的构造函数需要一个指向有效字符串的指针。 而空指针不是。 但是运行时库可能会也可能不会检查给定的指针是否为空。 因此,在一种环境中,代码可能只是崩溃,而在另一种环境中,运行时库可能会以另一种方式处理错误,例如抛出异常。

注意通过

char* p = NULL;

您没有创建空字符串,而是创建了一个值为 0 的指针,因此指向了一个非法地址。 如果你想创建一个指向空字符串的指针,你应该写:

char* p = "";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM