C++怎么把string 转换为char型数组

 我来答
亲亲亲亲的哦
2018-07-16 · TA获得超过5755个赞
知道答主
回答量:80
采纳率:0%
帮助的人:1.1万
展开全部

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的编译器,还可以通过编译开关来指定它是有符号数还是无符号数。

冰冻了你呢
2018-08-08 · TA获得超过1.2万个赞
知道答主
回答量:99
采纳率:0%
帮助的人:4.9万
展开全部

将string类型转换为字符数组char

char buf[10];
string str("ABCDEFG");
length = str.copy(buf, 9);
buf[length] = '\0';
或者
char buf[10];
string str("ABCDEFG");
strcpy(buf, str.c_str());//strncpy(buf, str.c_str(), 10);

字符数组转化成string类型
char ch [] = "ABCDEFG";
string str(ch);//也可string str = ch;
或者
char ch [] = "ABCDEFG";
string str;
str = ch;//在原有基础上添加可以用str += ch;

c_str函数的返回值是const char*的,不能直接赋值给char*,

所以就需要我们进行相应的操作转化,下面就是这一转化过程。

c++语言提供了两种字符串实现,其中较原始的一种只是字符串的c语言实现。

与C语言的其他部分一样,它在c+的所有实现中可用,

我们将这种实现提供的字符串对象,归为c-串,每个c-串char*类型的。

标准头文件<cstring>包含操作c-串的函数库。

这些库函数表达了我们希望使用的几乎每种字符串操作。       

当调用库函数,客户程序提供的是string类型参数,

而库函数内部实现用的是c-串,因此需要将string对象,

转化为char*对象,而c_str()提供了这样一种方法,

它返回一个客户程序可读不可改的指向字符数组的指针。      

例:

#include <iostream>

#include <string>

using std::string;void main()

{

string add_to="hello!";

//std::cout<<add_to;

const string add_on="baby";

const char*cfirst = add_to.c_str();

const char*csecond = add_on.c_str(); 

char*copy = new char[strlen(cfirst) + strlen(csecond) + 1];

strcpy( copy, cfirst);

strcat( copy, csecond);

add_to = copy;

delete [] copy;

std::cout<<add_to<<std::endl;

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
DQ123456kR
2015-04-16 · TA获得超过784个赞
知道小有建树答主
回答量:212
采纳率:100%
帮助的人:82.4万
展开全部
#include <iostream>
using namespace std;

int main()
{
    string s="sdjsd";
    char a[100];
    for(int i=0;i<s.length();i++) //逐个元素赋值
        a[i]=s[i];
    cout<<a<<endl;
    return 0;
}

运行结果:

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风若远去何人留
2015-04-16 · 知道合伙人互联网行家
风若远去何人留
知道合伙人互联网行家
采纳数:20412 获赞数:450132
专业C/C++软件开发

向TA提问 私信TA
展开全部
#include <iostream>
#include <string>
#include <cstring>
using namespace std;
int main()
{
    string s("test string");
    char str[100];
    
    strcpy(str, s.c_str());
    
    cout << str << endl;
    return 0;
}
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
是阿人0G
2023-04-01 · 超过10用户采纳过TA的回答
知道答主
回答量:50
采纳率:100%
帮助的人:2.9万
展开全部
调用string类的构造函数和各成员函数(包括运算符重载)就能实现string和字符数组之间的相互转换。
构造函数:
string(const char *s); //用c字符串s初始化类string的实例
成员函数
const char *data()const;//返回一个非null终止的c字符数组
const char *c_str()const;//返回一个以null终止的c字符串
运算符重载
string &assign(const char *s);//用c类型字符串s赋值
string &assign(const char *s,int n);//用c字符串s开始的n个字符赋值
string &append(const char *s); //把c类型字符串s连接到当前字符串结尾
string &append(const char *s,int n);//把c类型字符串s的前n个字符连接到当前字符串结尾
等等。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式