主要注意的一个问题是:std::string 实际是类似一个 vector<char>的结构。 它里面是可以存放 ascii为0 的字符
不算结尾 (否则 unicode方式的编码存放就有问题) 实际长度 用 length()获取至于string赋值和构造有好几种方式,可以看文档。
举例说明:char c[10]="wer|\t";c[4] = 0;std::string s =c;由于c是char* 长度只能用strlen获取, strlen遇到0 就结束了,所以就丢失数据了。构造和赋值,要把长度传进去:
std::string s(c,6); //构造s.assign(c,6); //赋值, 这个是包括结尾符0的;;;不足就补0;s.assign(c,5); //这个不包括结尾 0 , 比如protobuf 序列化出来的串,不用多加一个0。