string变量字符串的结束标志是什么,我看书上好像和c不一样,c的char *是以"\0"结束但c++好像不是
2012-03-08 20:18
609 查看
[align=center][/align] C++标准库的string不是以'\0'结束,而是string类中有一个记录长度的值 (具体怎么实现我不是很清楚,要等看过STL代码或者比我牛的大牛来给你说) 但是C++中的string你要得到它有多长,可以这么做 string str("abc"); str.size(); str.length(); //都返回3 而且,str中不会以'\0'判断字符串结束,可以这样 string str2("\0\0\0\0\0"); str2.size(); //等于5 如果要用string返回一个C style string 那么可以 str.c_str(); //会在字符串内容后加上一个C style string 的结束符号'\0' 这里返回的就是 "abc\0" str.data(); //这里返回的是 "abc" 嗯,我错了,但是我在看书的时候怎么是这么写的 我找找看 C++ Standard Library : A tutorial and Reference 中11.1章 Unlike C-strings, objects of class string have no special character '\0' at the end of the string. Note that only the single-argument version char* handles the character '\0' as a special character that terminates the string. In all other cases '\0' is not a special character: std::string s1("nico"); //initializes s1 with: 'n' 'i' 'c' 'o' std::string s2("nico",5) ; //initializes s2 with: 'n' 'i' 'c' 'o' '\0' std::string s3(5,'\0'); //initializes s3 with: '\0' '\0' '\0' '\0' '\0' s1.length() //yields 4 s2.length() //yields 5 s3.length() //yields 5 噢~~~ 是我错了,想这样初始化就对了~ std::string s3(5,'\0'); 这样s3 就是 "\0\0\0\0\0" 我那样初始化的确是错的,而且我大概知道错在哪里了~ 想想看~ 想好了再跟个贴 C/C++ code 嗯,错在初始化方法相关 string str("\0\0\0"); 这里调用的是 string(const char* p) 这个构造函数 这个构造函数的实现应该是依赖C style string的,我大概用自己的想法描述下 string::string(const char* p) { /* 将string内部的char* mp申请一个p指向的C风格字符串的长度的空间 将p的内容COPY到mp中 那么在第一步的时候就使用C风格字符串的判断长度方法,判断这个"\0\0\0"的长度是0 - - 所以这样的初始化得不到我想要的结果 */ } 而 string(int count,char ch) 则能得到想要表达STL的string不把'\0'做特殊字符处理的意思 |
相关文章推荐
- C++字符串中的"\0"问题
- C++字符串中的"\0"问题
- 字符串、double变量去除末尾的"."和"0"
- String字符串去掉最后一个","号的几种方式
- String s = Null 与 s="" 有什么区别?null意思是不存在,""意思是存在,但是值为空 null表示还没new出对象,就是还没开辟空间 “”表示new除了对象,但是这个对象装的是空
- C++之String的find方法,查找一个字符串在另一个字符串的什么位置;leveldb字符串转数字解析办法
- 关于C里面 数字0,字符'0',字符串"0",字符串结尾标志符'\0'
- C++Builder RAD Studio XE, UTF-8 String 转换为 char * 字符串的最简单方式, 常用于sqlite3开发
- C++字符数组的输入输出和字符串结束标志使用讲解
- 请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串"+100","5e2","-123","3.1416"和"-1E-16"都表示数值。 但是"12e","1a3.14","1.2.3","+-5"和"12e+4.3"都不是。
- C语言中的"NULL"到底是什么?又不是什么?有什么用?怎么用?
- C#中如何去掉字符串结束符"/0"
- c++中怎么判断一个string类型的字符串变量是否为数字?
- JAVA String.split()以"\t"分割字符串的问题
- 对于String对象,可以使用"="赋值,也可以使用"new"关键字赋值,两种方式有什么区别?
- 中间含有"\0"的常量字符串赋值给string的方法。
- 学用 ASP.Net 之 "字符串" (3): string 类的非扩展方法
- java中,字符串String类型的""和null值的区别
- 学用 ASP.Net 之 "字符串" (4): string 类的扩展方法
- c++中怎么判断一个string类型的字符串变量是否为数字?