char数组构造string

 

C++ 中如何使用用 char 数组 构造 string,确实是一个老掉牙的话题,但是稍加不注意你就会出错。

最近在写一个可以跨平台的日志程序,就遇到这个问题,故记之,共勉!

用 char 数组初始化 string 示例

 #include ​using std::string;using std::cout;​int main(int argc, const char * argv[]){char chArray[] = {'h', 'e', 'l', 'l'};cout << "array size = " << sizeof(chArray)/sizeof(char) << endl;cout << chArray << endl;string str(chArray);cout << "str = " << str << " and str's size = " << str.length() << endl;}

针对上面的代码,不同的编译器输出结果不一致,具有一定的随机性。

在 macos 系统下,输出结果

 array size = 4hell\310\367\277_\377•str = hell\310\367\277_\377• and str's size = 10

得到这种结果,简直要法克...

但是有时候输出结果又是下面那样的

 array size = 4hellstr = hell and str's size = 5

很明显,stringsize 不对.

思考一下,原来是少了 '\0',修改上面代码,如下:

 #include ​using std::string;using std::cout;​int main(int argc, const char * argv[]){char chArray[] = {'h', 'e', 'l', 'l', '\0'};cout << "array size = " << sizeof(chArray)/sizeof(char) << endl;cout << chArray << endl;string str(chArray);cout << "str = " << str << " and str's size = " << str.length() << endl;}

修改之后,代码的结果输出正常了。

 array size = 5hellstr = hell and str's size = 4

也就是说,char 数组初始化 string 对象,数组的结束符 '\0' 不要忘记了。

另外,要注意 stringsize 要比 char 数组size 小。

不知道上面的东西,你有没有看明白?

那么下面的代码输出,你觉得会达到自己的预期吗?

     const char * cp = str.c_str();unsigned long size = str.length();char chArray2[size];for (int i=0; i #include ​using std::string;using std::cout;​int main(int argc, const char * argv[]){// char[] ---> stringchar chArray[] = {'h', 'e', 'l', 'l', '\0'};cout << "array size = " << sizeof(chArray)/sizeof(char) << endl;cout << chArray << endl;string str(chArray);cout << "str = " << str << " and str's size = " << str.length() << endl;// string --> char[]const char * cp = str.c_str();unsigned long size = str.length();char chArray2[size + 1];for (int i=0; i char chArray[] = {'h', 'e', 'l', 'l', '\0'};

修改为

 char chArray[] = "hell";

或者

 const char *chArray = "hell";

代码也可以正常正确的输出。


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部