string 类中的一些成员函数
下面分别对常用的成员函数进行详解,compare 由于使用频率较低,这里暂不展开。
c_str()
c_str() 会返回一个指向 std::string 内部字符数组的只读 const char* 指针,且该数组以 \0(空字符)结尾,完全符合 C 语言风格字符串的规范。
当你需要把 std::string 传给仅支持 C 风格字符串(char*/const char*)的函数时,必须用 c_str()。例如调用 C 语言的文件操作函数 fopen 或打印函数 printf:
#include <iostream>
#include <string>
using namespace std;
int main() {
string filename("Test.cpp");
FILE* fout = fopen(filename.c_str(), "r");
if (fout) {
cout << "打开文件成功" << endl;
fclose(fout);
}
return 0;
}
注意,C 语言标准库函数如 fopen、printf 的参数类型要求严格,直接传 filename 会编译报错。核心禁忌是不要修改返回的指针内容,也不要单独保存指针,需保证原 std::string 对象的生命周期。
data()
data() 的核心功能和 c_str() 几乎一致,都返回指向内部字符数组的指针。但在 C++11 前后行为有变化:
- C++11 及以后:
data()和c_str()完全等价,返回的字符数组也以\0结尾。 - C++11 之前:
data()只返回指向字符数组的指针,不保证末尾有\0,而c_str()必须保证。
实际开发中,如果只是为了访问字符数据而不涉及 C 风格字符串处理,data() 语义更贴切;适配 C 函数则建议用 c_str()。在 C++11 后两者可互换。


