std::string (也就是C++中的string):标准并没有规定字符串必须以\0字符结尾。编译器在实现时既可以在结尾加上\0,也可以不加,这个是由编译器决定的,因为string是一个类,它的长度信息已经封装到类的私有变量里面了。 但是当通过c_str()或者data()(二者在c++ 11以及之后的标准中等价)转换得到的const char *时...
标准库的string类提供了3个成员函数来从一个string得到c类型的字符数组:c_str()、data()、copy(p,n)。 1. c_str():生成一个const char*指针,指向以空字符终止的数组。 注: ①这个数组的数据是临时的,当有一个改变这些数据的成员函数被调用后,其中的数据就会失效。因此要么现用先转换,要么把它的数据复制...
标准没定,所以你不应该依赖它。主流实现为了省事,后面一般都会补,但你不要依赖它。
char*c;strings="1234";c=s.c_str(); 上述代码中,c最后指向的内容是垃圾,因为s对象被析构,其内容被处理,同时编译器将会报错。正确代码如下: char*cstr,*p;stringstr("Please split this phrase into tokens");cstr=newchar[str.size()+1];strcpy(cstr,str.c_str()); 如果一个函数要求char*参数,可以...
到目前为止,还没有哪个实现2到没有结尾 \0 的。虽然标准并没有这个要求,但 C++ 标准要求 c_str...
strlen和sizeof作用于string通过字符串化c_str()得出的字符串结果都是一样的。所以用strlen时通过+1使得strncpy将最后一个结尾符拷贝过去了,但是用sizeof的时候没有+1,结果就没有最后的结尾符拷贝到p里面,输出没有碰到结尾符,才会乱码。strncpy在msdn上的解释是:当函数的第三个参数小于等于第二个...
c_str()接口是string类的一个函数,返回的是字符串的首地址,返回值类型是const char *的.如果要使用它并对其进行赋值操作,必须要使用strcpy函数.如果哦直接进行赋值,是不会赋值成功的.(小 知识:const char *是指向常量字符串的指针.) 在string类中.c_str()的生命周期受到string类实例的影响.如果我们使用string...
在C语言中,可以使用strlen函数来获取字符串的长度,然后在字符串的末尾加上一个空字符’\0’来处理字符串的空字符结尾。例如: #include <stdio.h> #include <string.h> int main() { char str[] = "hello"; int len = strlen(str); // 在字符串末尾加上空字符 str[len] = '\0'; printf("处理...
\0'。其余不能整体操作的情况不会自动添加'\0',需要时得由程序员写入添加语句。string类的对象与char数组处理字符串不同,它的字符串并不以'\0'结束,所以不存在添加不添加'\0'的问题,需要转换成char型字符串时得调用其成员函数c_str来做转换操作。
s.assign(str);//不说s.assign(str,1,3);//如果str是”iamangel” 就是把”ama”赋给字符串s.assign(str,2,string::npos);//把字符串str从索引值2开始到结尾赋给ss.assign(“gaint”);//不说s.assign(“nico”,5);//把’n’ ‘I’ ‘c’ ‘o’ ‘\0’赋给字符串s.assign(5,’x’);...