C++ string 类核心成员函数详解
在之前的内容中我们了解了 string 的基础,今天继续深入探讨一些常用的成员函数。这些函数在处理字符串转换、搜索定位和拼接时非常关键。
字符串转换与内存访问
c_str() 与 data()
这两个函数都用于获取 C 风格字符串指针,但适用场景略有不同。
c_str() 返回一个指向内部字符数组的只读 const char* 指针,且保证以 \0 结尾。当你需要把 std::string 传给仅支持 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;
}
注意:不要修改返回的指针内容,也不要单独保存这个指针而不保留原 string 对象,因为它的生命周期依赖于原对象。
data() 的核心功能与 c_str() 几乎一致。区别在于 C++11 标准前后:
- C++11 及以后:
data()和c_str()完全等价,都保证末尾有\0。 - C++11 之前:
data()不保证末尾有\0,仅包含有效字符。
实际开发中,适配 C 函数建议用 c_str()(语义更清晰),仅访问字符数据可用 data()。
copy() 与 substr()
copy() 将指定范围的字符拷贝到外部字符数组中。它不会自动加 \0,需要手动处理,适合精准提取部分字符。
#
{
std::string str = ;
buf[] = {};
copied = str.(buf, );
buf[copied] = ;
std::cout << buf << std::endl;
;
}


