C++:char[] & string 的相互转换

常识

1. char [ ]   ==》 string

直接赋值

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str;
	char c[] = "123";
	str = c;
	cout << str << endl;
	cout << str.length() << endl;
	return 0;
}

 

2. string  ==》 char [ ]   

3种方法

(1)调用  string   的   data   函数 

【注】:data除了返回字符串内容外,不附加结束符'\0'

【注】:const char* 与 char*之间用const_cast转换符;

#include<iostream>
#include<string>
using namespace std;
int main()
{
	string str = "abc";
	const char *p;
	p = str.data();

	char *q;
	q = const_cast<char*>(str.data());
	cout << "p: " << p << endl;
	cout << "q: " << q << endl;
	return 0;
}

//可以返回tchar值
void test(char* tchar)
{
    string s1 = "1.0";
    //tchar = const_cast<char*>(s1.data());//返回空
    char* ch = const_cast<char*>(s1.data());
    memcpy(tchar,ch,s1.length()*sizeof(char));
}

 
(2)调用  string   的  c_str   函数 

【注】:使用string提供的函数c_str() ,返回一个以‘\0’结尾的字符数组。

推荐使用strcpy函数

#include<iostream>
#include<string>
using namespace std;
int main()
{
	const char* c;
	string s = "1234";
	c = s.c_str(); //c最后指向的内容是垃圾,因为s对象被析构,其内容被处理
	cout << c << endl;

	char d[20];
	strcpy_s(d, const_cast<char*>(s.c_str()));
	cout << d << endl; //最好用strcpy_s

	return 0;
}

(3)调用  string   的  copy   函数 
如:
string str="hello"; 
char p[40]; 
str.copy(p,5,0); //这里5,代表复制几个字符,0代表复制的位置
*(p+5)='/0';     //要手动加上结束符
cout < <p;

【注】:

a. string可以被看成是以字符为元素的一种容器, 字符构成序列(字符串)。

另,strcpy函数在高版本的vs中无法使用的问题

原因:一般认为是vs准备弃用strcpy的,安全性较低,所以微软提供了strcpy_s来代替。

然而,strcpy_s并没有strcpy好用,我们要想继续在VS2015中使用strcpy该怎么办 呢?下面是几种解决方法

解决方法:

1.  其实在下面的输出错误信息中有解决方法,“To disable deprecation , use _CRT_SECURE_NO_WARNINGS”,意思是我们可以不进行兼容性检查,我们可以在项目-属性-配置属性-c/c++-预处理器-预处理定义里边加上一句:_CRT_SECURE_NO_WARNINGS ,如下图所示

2. 也是在下面的输出信息中,我们可以看到有一处错误代号“ error C4996:”,所以我们可以在程序开头加上一句

#pragma warning(disable:4996)”就行,意思是忽略这个错误,如下图

3. 可以在:项目-属性-配置属性-c/c++中的常规,里面有个SDL选项,关了。还有在代码生成中有个安全检查选项(/GS)关了。虽然这种方法也可以解决这个问题,但是我本人不太提倡这种解决办法,还是前两种解决方法比较好

 

参考文章;

1. https://www.cnblogs.com/devilmaycry812839668/p/6353807.html

2. https://www.cnblogs.com/mdumpling/p/8179167.html

3. https://www.cnblogs.com/dmego/p/6065144.html strcpy函数在VS2015无法使用的问题

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值