string 对象与 C 风格字符串的混用
Apr 19, 2014
所谓 C 风格的字符串即 以空字符结束的字符数组 。
下面定义了一个 string
对象:
1 | string s("Hello World"); |
允许使用字符串字面值来初始化 string 对象,更一般的情况下,能够出现字符串字面值的地方都能出现以空字符结束的字符数组:
- 允许以空字符结束的字符数组来初始化 string 对象或者为 string 对象赋值
- 在 string 对象的加法运算中,允许其中一个 (仅仅是一个) 运算对象用以空字符结束的字符数组来替代,在 string 对象的复合赋值运算中,允许其 右侧运算对象 用以空字符结束的字符数组来替代
上述性质反过来是不成立的,即不允许用 string
对象来初始化一个以空字符结束的字符数组,在以空字符结束的字符数组作为运算对象时不允许用 string
对象来替代,例如:不能使用 string
对象直接初始化一个指向字符的指针,使用 string
对象的 c_str
函数来完成这个功能,c_str
函数的返回结果是一个指向以空字符结束的字符数组的指针,这个字符数组的内容与调用这个函数的 string
对象的内容完全一致:
1 | char *str = s; // 错误:不能使用 string 对象初始化 char* |
为了更加清晰地理解 c_str()
函数的返回结果,看看以下的程序及其运行结果:
1 |
|
以上程序的运行结果为:Hello World
。