C风格字符串
一、介绍
字符串字面值是一种通用结构的实例,这种结构即是C++由C继承而来的C风格字符串
。
C风格字符串不是一种类型,而是为了表达和使用字符串而形成的一种约定俗成的写法。
按此习惯书写的字符串存放在字符数组中并以空字符结束
。
以空字符结束的意思是在字符串最后一个字符后面跟着一个空字符'\0'
。
一般利用指针来操作这些字符串。
二、C标准库String
函数
下表列举了C语言标准库提供的一组函数。这些函数可用于操作C风格字符串,它们定义在cstring
头文件中,cstring
是C语言头文件string.h
的C++版本。
操作 | 说明 |
---|---|
strlen(p) | 返回p的长度,空字符不计算在内 |
strcmp(p1, p2) | 比较p1和p2的相等性。如果p1 == p2,返回0;如果 p1 > p2,返回一个正值;如果 p1 < p2,返回一个负值 |
strcpy(p1, p2) | 将p2拷贝给p1,返回p |
strcat(p1, p2) | 将p2追加到p1之后,返回p1 |
三、混用string
对象和C风格字符串
任何出现字符串字面值的地方都可以用以空字符结束的字符数组来替代:
如果程序的某处需要一个C风格字符串,无法直接用string
对象来代替它。例如:不能用string
对象直接初始化指向字符的指针。为了完成该功能,string
专门提供了一个名为c_str
的成员函数:
string s("Hello World"); // s的内容是 "Hello World"
char *str = s; // 错误:不能用string对象初始化 char*
const char *str = s.c_str(); // 正确
c_str
函数的返回值是一个C风格的字符串。也就是说,函数的返回结果是一个指针,该指针指向一个以空字符结束的字符数组,而这个数组所存的数据恰好与那个string
对象一样。结果指针的类型是const char*
,从而确保我们不会改变字符数组的内容。