char数组构造string

前端之家收集整理的这篇文章主要介绍了char数组构造string前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

这是1个老掉牙的话题,但是你略加不注意就会出错.

最近在写1个可以跨平台打印的程序,就遇到这个问题,故记之.共勉!

用 char 数组初始化string

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

针对上面的代码,不同的编译器输出结果不1致,并且具有随机性.

在 mac 平台下,输出结果

array size = 4 mark310367277_377 str = mark310367277_377 and str's size = 10


得到这类结果,简直要 fuck...

但是有时候输出结果又是这样的

array size = 4 mark str = mark and str's size = 5
很明显,string 的 size 不对.

思考1下,原来是少了 '',修改上面代码

#include <string> using std::string; using std::cout; int main(int argc,'k',''}; 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 = 5 mark str = mark and str's size = 4

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

另外,要注意,string 的 size 要比 char 数组 size 小.

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

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

const char * cp = str.c_str(); unsigned long size = str.length(); char chArray2[size]; for (int i=0; i<size; i++) { chArray2[i] = cp[i]; cout << chArray2[i] << endl; } string str2(chArray2); cout << "str2 = " << str2 << " and str2's size = " << str2.length() << endl;

ok,这里很明显是毛病的,最少两处是不对的.

1. chArray2的大小

2. chArray2的结束符没有添加 ''


修改1下,给出完全示例

#include <string> using std::string; using std::cout; int main(int argc,const char * argv[]) { // char[] ---> string char chArray[] = {'m',''}; 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<size; i++) { chArray2[i] = cp[i]; cout << chArray2[i] << endl; } chArray2[size] = ''; string str2(chArray2); cout << "str2 = " << str2 << " and str2's size = " << str2.length() << endl; }

或许有人会说,为何要用 char 数组去构造 string 对象,用 char *(指针)不是更好吗?

的确,是这样,但是有时候需要 char 数组来操作,我也是把自己遇到的问题,加以总结跟大家分享1下.


把示例代码中的

char chArray[] = {'m',''};

修改

char chArray[] = "mark";

const char *chArray = "mark";

代码也能够正常正确的输出.


猜你在找的PHP相关文章