含有空字符0的char 字符串给string赋值

    xiaoxiao2026-05-16  7

         这几天在用Thrift 传输一个文件时,发现此问题,特mark;

     char字符串给string赋值,都是用  string  str = string(charBuf),但如果charBuf 含有空字符,那么赋值后字符串会被0截断,查了下string 的构造函数   string(const char * s) 说明:将string对象初始化为s指向NBTS。NBTS为null-byte-temnated string的缩写,表示以空字符结束的字符串------ 传统的C字符串   原来是用错了string 构造函数,查了下用string的赋值函数assign可以实现含空字符字符串赋值,其中string &assign(const char *s) 这种赋值方式,也将s当作C字符串,也是会被'\0'截断,要用带字符个数才可以。具体见如下测试代码:

     ===================================

    #include <stdio.h> #include <string> #include <iostream> using namespace std; int main() { char buf[7] = {'a','b','c','\0','e','f'}; string str1,str2,str3; str1 = string(buf); str2.assign(buf); str3.assign(buf,sizeof(buf)/sizeof(char)); cout <<"when str1 = string(buf) :\nstr1 is\t" << str1<<endl; cout <<"when str2.assign(buf): \nstr2 is\t" << str2<<endl; cout <<"when str3.assign(buf,sizeof(buf)/sizeof(char)) : \nstr3 is\t" << str3<<endl; return 0; } 测试结果如下:

    转载请注明原文地址: https://ju.6miu.com/read-1309757.html
    最新回复(0)