char* char[]及string的区别及相互转换

1.char* char[]及string之间的区别
char *p, 表示p是一个指向字符串的指针
char p[], 表示p是一个字符串的数组
string s, 表示s是一个string类的对象
下面用一段代码及其输出来说明它们之间的区别:
char p1[] = “12345”;
char *p2 = “12345”;
string p3 = “12345”;
cout << “sizeof(p1) is: ” << sizeof(p1) << endl;
cout << “strlen(p1) is: ” << strlen(p1) << endl;
cout << “sizeof(p2) is: ” << sizeof(p2) << endl;
cout << “strlen(p2) is: ” << strlen(p2) << endl;
cout << “sizeof(p3) is: ” << sizeof(p3) << endl;
cout << “strlen(p3) is: ” << strlen(p3.c_str()) << endl;
cout << “length(p3) is: ” << p3.length() << endl;
cout << “capacity(p3) is: ” << p3.capacity() << endl;

输出结果如下:
sizeof(p1)is: 6
strlen(p1)is: 5
sizeof(p2)is: 4 //64位程序结果为:sizeof(p2)is: 8
strlen(p2)is: 5
sizeof(p3)is: 28 //64位程序结果为:sizeof(p3)is: 40
strlen(p3)is: 5
length(p3)is: 5
capacity(p3)is: 15

p1是char型数组名称,sizeof(p1)表示数组的长度(整个数组所占的字节数)。
P2是指向char类型的指针,sizeof(p2)表示其所指向的地址值所占的字节数,如果编译成64位程序,运行结果为“sizeof(p2)is: 8”。
P3是string类型的对象,sizeof(p3)是string类型所占空间的大小,无论赋给它多长的字符串,sizeof(p3)都是固定值28,如果编译成64位程序,运行结果为“sizeof(p3)is: 40”。
strlen函数统计字符串的长度,但不包含结束符’\0’,;string类的length函数同样是统计字符串长度;string类的capacity函数的返回值一定会大于等于字符串的长度,string会预先分配一定的空间,空间不足时会重新分配。
2.char* char[]及string之间的转换
(1) char*转string:可以直接赋值。
string s;
char *p = “hello”;//直接赋值
s = p;
(2) char[]转string:可以直接赋值。
char str[]=”hello”;
//方法1
string ss1(str);
//方法2
string ss2;
ss2=str;
//方法3
string ss3;
ss3.insert(0,str);
(3) char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
// 创建一个字符串数组
char arr[10] = {0};
// 创建一个指针,并指向静态区存放的一个字符串“ABC”
char* tmp = “ABC”;
// 利用字符串拷贝函数进行拷贝
strcpy(arr, tmp);
// 例如内存拷贝函数进行拷贝
memcpy(arr, tmp, sizeof(arr));
(4) string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数(需调用string对象的c_str函数,返回类型为const char* )。
string s(“test string”);
char str[100];
strcpy(str, s.c_str());
cout << str << endl;
(5) string转char*:调用string对象的c_str函数,直接赋值即可。
string str=“world”;
const char p = str.c_str();//要加const或者等号右边用char
(6) char[]转char*:直接赋值即可。
char s[6] = “12345”;
char *t=s;
printf(“%s\n”,t);
t指向s首地址
注:char a 表述字符串数组。**

发布了46 篇原创文章 · 获赞 21 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/pangrui201/article/details/78529763