在C ++中,为什么以下代码会抛出运行时错误?有人可以帮我解释一下吗?
char* p = NULL;
string str(p);
我在VS2013和Codeblocks中试过这个,但都遇到了运行时错误。
答案 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 = "";