本人想将string对象初始化为空,string poing=NULL;
编译可以通过,但是无法运行,报错:
terminate called after throwing an instance of “std::logic_error”
what(): basic_string::_S_construct null not valid
查阅得std::string 的构造函数需要的是一个 c 风格的字符串指针(要求以字符 null 结尾),NULL好像是0吧,一个宏定义,用来防止指针悬空,一般用来和指针做比较或赋给指针。
既然可以赋给指针,而string构造函数也需要指针,为什么不能直接用来初始化?
编译可以通过,但是无法运行,报错:
terminate called after throwing an instance of “std::logic_error”
what(): basic_string::_S_construct null not valid
查阅得std::string 的构造函数需要的是一个 c 风格的字符串指针(要求以字符 null 结尾),NULL好像是0吧,一个宏定义,用来防止指针悬空,一般用来和指针做比较或赋给指针。
既然可以赋给指针,而string构造函数也需要指针,为什么不能直接用来初始化?
解决方案
15
空是什么意思?里面没有字符?
string poing;
这样就是空的 poing.empty()返回true。
string不同于指针,你要放弃你之前的char *的指针想法。
NULL完全不是以NULL结尾的字符串,”\0″这个才是你想要的?
string poing;
这样就是空的 poing.empty()返回true。
string不同于指针,你要放弃你之前的char *的指针想法。
NULL完全不是以NULL结尾的字符串,”\0″这个才是你想要的?
10
std::string是一个字符容器,不以”\0″结尾,可以包含任意的字符。所以,假如初始化为空,可以有几种方法(不限于例子中的方法)
1、std::string s;
2、std::string s=””;
3、std::string s;
s.clear();
1、std::string s;
2、std::string s=””;
3、std::string s;
s.clear();
15
NULL即0
“”即”\0”
但以上两行不是一回事!
“”即”\0”
但以上两行不是一回事!