电商网站建设报价单,山西网站建设公司,网站搭建规划,网站表单点击切换混用string对象和C风格字符串
我们都知道允许使用字符串字面值来初始化string对象#xff1a;
string s(Hello World!);C规定#xff0c;任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代#xff1a;
允许使用以空字符结束的字符数组来初始化…混用string对象和C风格字符串
我们都知道允许使用字符串字面值来初始化string对象
string s(Hello World!);C规定任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代
允许使用以空字符结束的字符数组来初始化string对象或为string对象赋值。在string对象的加法运算中允许使用以空字符结束的字符数组作为其中一个运算带对象不能两个对象都是在string对象的复合赋值运算中允许是用以空字符结束的字符数组作为右侧的运算对象。
上述性质反过来并不成立如果程序的某处需要一个C风格字符串无法直接用string对象来替代它。
例如不能使用string对象直接初始化指向字符的指针。为了实现这一功能string专门提供了一个名为c_str的成员函数
char *str s; // 错误不能用string对象初始化char*
const char *str s.c_str; // 正确函数返回结果使用一个指针该指针指向一个以空字符结束的字符数组而这个数组所存的数据恰好与哪个string对象的一样。结果指针的类型是const char*从而确保我们不会改变字符数组的内容。
PS:由于我们无法保证c_str函数返回的数组一直有效如果后续的操作改变了s的值就可能让之前返回的数组失去效用。因此如果执行完c_str()函数后程序想一直都能使用其返回的数组最好将该数组重新拷贝一份。