【数据类型】string与char[]的转换方法

在 【数据结构】栈与队列Part2:栈的应用之表达式转换 中,保存表达式的数据类型是string类型,而atof()函数是将char[]类型转化为浮点数的函数。

因此,将string转化为char[]的方法是非常重要的。

查阅资料:c++ string转char* 

我主要采用这篇文章提到strcpy()函数进行操作,下面给出示范代码:

 1 #include<iostream>
 2 #include<stdio.h>
 3 #include<stdlib.h>
 4 #include<algorithm>
 5 #include<map>
 6 #include<stack>
 7 #include<queue>
 8 
 9 using namespace std;
10 
11 int main(){
12     string str="12.3";
13     char p[20];
14     strcpy(p,str.c_str());
15     double q;
16     q=atof(p);
17     cout<<q;
18     return 0;
19 }

下面再总结一下这篇文章有意思(看得懂)的部分:(我实在是菜的过分)

1.c_str()返回的是一个临时指针,不能对其进行操作。

我的理解是,这个函数只能用来给出一个临时的char*指针,将string转化为char*,适用于下面这种情况:

string str="12.4";
cout<<strlen(str.c_str())<<endl;

这里不需要长期的保持这个指针,因此创建了一个临时指针,指向string str。

因此在使用的时候,下面这种方法是错误的:

char* c;
string s="1234";
c = s.c_str();

这种写法,在调用完c_str()函数后,这个临时指针会被销毁,则c所指向的指针是一个被销毁的垃圾数据。

因此应该创建一个char[]类型,将临时指针中的内容保存到固定的指针后。

2.还有两种声明转换方法:

string str = "hello";
const char* p = str.data();
string str=“world”;
const char *p = str.c_str();

这里由于用到的是const声明方法,所以并不适用于我需要的灵活的应用场景,所以最后还是采用了strcpy()的形式保存str中的内容到char[]中。

猜你喜欢

转载自www.cnblogs.com/Ze-Black/p/10059999.html