[C++] string char* (visual studio)

先说个题外话,字符串的长度 。

string a = "12345";
a.size()
a.length()


char a[] = "12345";
strlen(a)
sizeof(a)/sizeof(char)


char* a = "12345"
strlen(a)

char*的sizeof是求的指针的长度,永远是4 !!!。

char* or char[] to string

直接赋即可

char* a = "123";
char b[] = "123";
string c = a;
string d = b;

string to char*

string可以被看成是以字符为元素的一种容器。字符构成序列(字符串)。有时候在字符序列中进行遍历,标准的string类提供了STL容器接口。

具有一些成员函数比如begin()、end(),迭代器可以根据他们进行定位。

与char*不同的是,string不一定以NULL('')结束。string长度可以根据length()或者size()得到【相同效果】,string可以根据下标访问。

注意const !!!

string a = "123";
const char* b = a.c_str();
const char* c = a.data();

硬转char*

string a = "123";
char* b = new char[a.size()+1];
strcpy_s(b, a.size()+1, a.c_str());

(1)strcpy_s的第二个参数

errno_t strcpy_s(
   char *strDestination,
   size_t numberOfElements,
   const char *strSource 
);

strDestination      位置的位置字符串缓冲区
numberOfElements    目标字符串缓冲区的大小。
strSource           null 终止的源字符串缓冲区。

(2)strcpy

这是一个被microsoft遗弃了(出于安全考虑,很多函数内部是不进行参数检测的(包括越界类的)),会报错,两种解决办法。

strcpy(b, a.c_str());
error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:program files (x86)microsoft visual studio 11.0vcincludestring.h(110) : 参见“strcpy”的声明

第一种就是弃用,使用MS推荐的strcpy_s。

第二种就是屏蔽掉。三种办法:

1)在所有#include之前加上    #define _CRT_SECURE_NO_DEPRECATE

2)使用声明  #pragma warning(disable:4996)

3)项目->属性->配置属性->C/C++ -> 预处理器 -> 预处理器定义,增加:

_CRT_SECURE_NO_DEPRECATE



原文地址:https://www.cnblogs.com/zhanxiage1994/p/6909827.html