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

时间:2015-06-26 08:39:51

标签: c++

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

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

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

2 个答案:

答案 0 :(得分:1)

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

供参考,[string.cons]:

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

要求: s指向至少traits::length(s) + 1 charT元素的数组。

traits::length(s))需要空终止数组,请参阅[char.traits.require]。)

答案 1 :(得分:0)

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

请注意

char* p = NULL;

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

char* p = "";