[C++]char *转std::string的一个小陷阱

       通常情况下,我们将char*或者char[]转换成std::string使用的基本都是string的构造函数或者直接转换。(这种基本都是asscii)

char hello[] = "hello";
std::string str1(hello);
std::string str2 = hello;

       当char用于16进制的时候,再这样转换就会存在一个小问题:当某个char为0x00时候,string默认赋值完成,后续数据不会再拷贝,类似于strlen的问题。

char msg[] = { 0x01,0x02,0x00,0x00,0x20,0x10 };
int len=strlen(msg);
std::string str3(msg);
std::string str4 = msg;

可以看到,后续的内容string并没有去拷贝。

std::string提供了assign方法去赋值,使用这个方法的前提是你必须知道char*的"真正长度"

std::string str5;
str5.assign(msg, 6);

猜你喜欢

转载自blog.csdn.net/qq_36251561/article/details/119111459