c++如何将string 转换为char*

我按以下转换总是提示deprecated conversion from string constant to char*
ifstream in;
string a;
while(in.good())
{
in>>a;
char *p=a.data();
}

1、如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。



2、const char *c_str();

c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.

这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式.

注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针

比如:最好不要这样:

char* c;
string s="1234";
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理

应该这样用:

char c[20];
string s="1234";
strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作

再举个例子:

c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
string s = "Hello World!";
printf("%s",s.c_str()); //输出 "Hello World!"

拓展资料:

1.C++是C语言的继承,它既可以进行C语言的过程化程序设计,又可以进行以抽象数据类型为特点的基于对象的程序设计,还可以进行以继承和多态为特点的面向对象的程序设计。C++擅长面向对象程序设计的同时,还可以进行基于过程的程序设计,因而C++就适应的问题规模而论,大小由之。

2.C++不仅拥有计算机高效运行的实用性特征,同时还致力于提高大规模程序的编程质量与程序设计语言的问题描述能力。

3.string 是C++中的字符串。 字符串对象是一种特殊类型的容器,专门设计来操作的字符序列。

4.不像传统的c-strings,只是在数组中的一个字符序列,我们称之为字符数组,而C + +字符串对象属于一个类,这个类有很多内置的特点,在操作方式,更直观,另外还有很多有用的成员函数。 string 的定义为:typedef basic_string<char> string;

5.char是C/C++整型数据中比较古怪的一个,其它的如int/long/short等不指定signed/unsigned时都默认是signed,但char在标准中是unsigned,编译器可以实现为带符号的,也可以实现为不带符号的,有些编译器如pSOS的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-04-13
1、如果要将string转换为char*,可以使用string提供的函数c_str() ,或是函数data(),data除了返回字符串内容外,不附加结束符'\0',而c_str()返回一个以‘\0’结尾的字符数组。

2、const char *c_str();
c_str()函数返回一个指向正规C字符串的指针,内容与本string串相同.
这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式.
注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针
比如:最好不要这样:
char* c;
string s="1234";
c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
应该这样用:
char c[20];
string s="1234";
strcpy(c,s.c_str());
这样才不会出错,c_str()返回的是一个临时指针,不能对其进行操作
再举个例子
c_str() 以 char* 形式传回 string 内含字符串
如果一个函数要求char*参数,可以使用c_str()方法:
string s = "Hello World!";
printf("%s",s.c_str()); //输出 "Hello World!"本回答被网友采纳
第2个回答  2014-10-06
char* p=new char[a.size()];
strcpy(p,a.data());

delete p;


不能通过a.data()和a.c_str()返回的指针修改string的内容,但像上面拷贝一份内容就可以

第3个回答  2018-08-01
你可以将Char类型变量声明为一个数组,如B:array[0..100] of Char,这相干B中就可以保存多个字符了,其转换如下例:var A:String; B:array[0..100] of Char;Char 是字符类型,String 是字符串类型,也就是说,Char类型的值只有一个字符,而String类型的值却可以有多个字符(其容量好象为2G)。将Char转换为String时,直接应用A:=B即可(A为String类型,B为Char类型),但结不雅可想而知,String类型变量A的值只是一个字符。begin …… A:=B; //将Char数组转换为String StrPCopy(B,A); //将String转换为Char ……end;也就是说,将String类型的变量赋值给Char类型的变量时,不克不及直接赋值,必须用StrPCopy函数,而将Char类型的变量赋值给String类型的变量时可以直接赋值。本回答被网友采纳
第4个回答  2016-07-09
1.直接在构造String时建立。
char data[] = {'s', 'g', 'k'};
String str = new String(data);

2.String有方法可以直接转换。
String.valueOf(char[] chr)就可以。
如:
char[] cha = {'s','g','h'};
String n = String.valueOf(cha);
public class Test
{
public static void main(String [] args)
{
char c = 'a';
System.out.println (c);
String str = String.valueOf(c);
System.out.println (str);

}
}
相似回答