C++中的 c_str() 函数

简介: 功能:c_str() 函数可以将 const string* 类型 转化为 cons char* 类型头文件:#include<cstring>c_str()就是将C++的string转化为C的字符串数组,c_str()生成一个const char *指针,指向字符串的首地址因为在c语言中没有string类型,必须通过string类对象的成员函数 c_str() 把 string 转换成c中的字符串样式

注意点:
c_str() 这个函数转换后返回的是一个临时指针,不能对其进行操作
所以因为这个数据是临时的,所以当有一个改变这些数据的成员函数被调用后,该数据就会改变失效;

例如:

include

include

using namespace std;

int main() {

const char *ptr;
string s = "12345";
ptr = s.c_str();
cout << "s改变前ptr为:" << ptr << endl;
s = "66666";
cout << "s改变后ptr为:" << ptr << endl;
return 0;

}
输出结果可以看出 s 一变那么 ptr 就会改变;
image.png
因此要么直接将这个数据应用或输出,要么把它的数据用 strcpy() 函数复制到自己可以管理的内存中;

include

include

using namespace std;

int main() {

char ptr[5];
string s = "12345";
strcpy(ptr, s.c_str());
cout << "s改变前ptr为:" << ptr << endl;
s = "66666";
cout << "s改变后ptr为:" << ptr << endl;
return 0;

}
image.png
这就不会再出现上面的问题了;
总结
这个函数单独出现的概率不大,经常会和其他函数一起使用,总之记住功能会用就行了;

相关文章
|
28天前
|
程序员 C++ 容器
在 C++中,realloc 函数返回 NULL 时,需要手动释放原来的内存吗?
在 C++ 中,当 realloc 函数返回 NULL 时,表示内存重新分配失败,但原内存块仍然有效,因此需要手动释放原来的内存,以避免内存泄漏。
|
1月前
|
存储 前端开发 C++
C++ 多线程之带返回值的线程处理函数
这篇文章介绍了在C++中使用`async`函数、`packaged_task`和`promise`三种方法来创建带返回值的线程处理函数。
45 6
|
1月前
|
C++
C++ 多线程之线程管理函数
这篇文章介绍了C++中多线程编程的几个关键函数,包括获取线程ID的`get_id()`,延时函数`sleep_for()`,线程让步函数`yield()`,以及阻塞线程直到指定时间的`sleep_until()`。
23 0
C++ 多线程之线程管理函数
|
1月前
|
编译器 C语言 C++
C++入门3——类与对象2-2(类的6个默认成员函数)
C++入门3——类与对象2-2(类的6个默认成员函数)
23 3
|
1月前
|
编译器 C语言 C++
详解C/C++动态内存函数(malloc、free、calloc、realloc)
详解C/C++动态内存函数(malloc、free、calloc、realloc)
158 1
|
1月前
|
存储 编译器 C++
C++入门3——类与对象2-1(类的6个默认成员函数)
C++入门3——类与对象2-1(类的6个默认成员函数)
30 1
|
1月前
|
编译器 C语言 C++
C++入门6——模板(泛型编程、函数模板、类模板)
C++入门6——模板(泛型编程、函数模板、类模板)
41 0
C++入门6——模板(泛型编程、函数模板、类模板)
|
2月前
|
编译器 C++
【C++核心】函数的应用和提高详解
这篇文章详细讲解了C++函数的定义、调用、值传递、常见样式、声明、分文件编写以及函数提高的内容,包括函数默认参数、占位参数、重载等高级用法。
22 3
|
3月前
|
编译器 C++ 容器
【C++】String常见函数用法
【C++】String常见函数用法
|
3月前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
42 0