混合使用标准库类 string 和 C 风格字符串
2013-03-20 16:23
204 查看
许多 C++ 程序在有标准类之前就已经存在了,因此既没有使用标准库类型 string 也没有使用 vector。而且,许多 C++ 程序为了兼容现存的 C 程序,也不能使用 C++ 标准库。因此,现代的 C++ 程序经常必须兼容使用数组和/或 C 风格字符串的代码,标准库提供了兼容处理。
毫无疑问,当然可以用字符串字面值来初始化 string 类对象:
string st3("Hello World"); // st3 holds Hello World
通常,由于 C 风格字符串与字符串字面值具有相同的数据类型,而且都是以空字符 null 结束,因此可以把 C 风格字符串用在任何可以使用字符串字面值的地方:
1) 可以使用 C 风格字符串对 string 对象进行初始化或赋值。
2) string 类型的加法操作需要两个操作数,可以使用 C 风格字符串作为其中的一个操作数(或者用作复合赋值操作的右操作数)。
反之则不成立:在要求C风格字符串的地方不可直接使用标准库 string 类型对象。例如,无法使用 string 对象初始化字符指针:
char *str = st2; // compile-time type error
但是,string 类提供了一个名为 c_str 的成员函数,以实现我们的要求:
char *str = st2.c_str(); // almost ok, but not quite
c_str 函数返回 C 风格字符串,其字面意思是:“返回 C 风格字符串的表示方法”,即返回指向字符数组首地址的指针,该数组存放了与 string 对象相同的内容,并且以结束符 null 结束。
如果 c_str 返回的指针指向 const char 类型的数组,则上述初始化失败,这样做是为了避免修改该数组。因此,正确的初始化应为:
const char *str = st2.c_str(); // ok
毫无疑问,当然可以用字符串字面值来初始化 string 类对象:
string st3("Hello World"); // st3 holds Hello World
通常,由于 C 风格字符串与字符串字面值具有相同的数据类型,而且都是以空字符 null 结束,因此可以把 C 风格字符串用在任何可以使用字符串字面值的地方:
1) 可以使用 C 风格字符串对 string 对象进行初始化或赋值。
2) string 类型的加法操作需要两个操作数,可以使用 C 风格字符串作为其中的一个操作数(或者用作复合赋值操作的右操作数)。
反之则不成立:在要求C风格字符串的地方不可直接使用标准库 string 类型对象。例如,无法使用 string 对象初始化字符指针:
char *str = st2; // compile-time type error
但是,string 类提供了一个名为 c_str 的成员函数,以实现我们的要求:
char *str = st2.c_str(); // almost ok, but not quite
c_str 函数返回 C 风格字符串,其字面意思是:“返回 C 风格字符串的表示方法”,即返回指向字符数组首地址的指针,该数组存放了与 string 对象相同的内容,并且以结束符 null 结束。
如果 c_str 返回的指针指向 const char 类型的数组,则上述初始化失败,这样做是为了避免修改该数组。因此,正确的初始化应为:
const char *str = st2.c_str(); // ok
相关文章推荐
- 混合使用标准库类string和C风格字符串
- C风格字符串与标准库类String 区别和转换
- c风格字符串和C++的string在文件名方面的使用注意
- c风格字符串和string使用的一些注意点
- JAVA字符串格式化-String.format()的使用
- JAVA字符串格式化-String.format()的使用
- JAVA字符串格式化-String.format()的使用
- APS.NET_MVC5学习笔记-创建连接字符串(Connection String)并使用SQL Server LocalDB
- JAVA字符串格式化-String.format()的使用
- 一个中文汉字算两位,一个英文字母算一位,计算中文和英文混合的字符串长度。字符串:String str = "我不好java";
- PowerShell中使用Out-String命令把对象转换成字符串输出的例子
- 【C语言】编写一个函数reverse_string(char * string)(递归实现),将参数字符串中的字符反向排列,不能使用C函数库中的字符串操作函数。
- 带属性的字符串(NSMutableAttributedString)的使用
- 带属性的字符串(NSMutableAttributedString)的使用
- C语言 编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。 要求:不能使用C函数库中的字符串操作函数。
- JAVA字符串格式化-String.format()的使用
- JAVA字符串格式化-String.format()使用
- JAVA字符串格式化-String.format()的使用
- 【转】JAVA字符串格式化-String.format()的使用--不错
- JAVA字符串格式化-String.format()的使用