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

转载自博客: http://blog.csdn.net/u010102226/article/details/51417444


1.char* char[]及string之间的区别

char *p, 表示 p 是一个指向字符串的指针
char p[], 表示 p 是一个字符串的数组
string s, 表示s是一个 string的对象

下面用一段代码及其输出来说明它们之间的区别:

  1. char p1[] = "12345";  
  2. char *p2 =  "12345";  
  3. string p3 = "12345";  
  4. cout << "sizeof(p1) is: " << sizeof(p1) << endl;  
  5. cout << "strlen(p1) is: " << strlen(p1) << endl;  
  6. cout << "sizeof(p2) is: " << sizeof(p2) << endl;  
  7. cout << "strlen(p2) is: " << strlen(p2) << endl;  
  8. cout << "sizeof(p3) is: " << sizeof(p3) << endl;  
  9. cout << "strlen(p3) is: " << strlen(p3.c_str()) << endl;  
  10. cout << "length(p3) is: " << p3.length() << endl;  
  11. cout << "capacity(p3) is: " << p3.capacity() << endl;  
	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:可以直接赋值。
(2) char[]转string:可以直接赋值。
(3) char*转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数。
(4) string转char[]:不能直接赋值,可以循环char*字符串逐个字符赋值,也可以使用strcpy_s等函数(需调用string对象的c_str函数,返回类型为const char* )。
(5) string转char*:调用string对象的c_str函数,直接赋值即可。
(6) char[]转char*:直接赋值即可。

注:string类型的c_str函数返回常指针,不能作为左值,如:sprintf(s.c_str(),”%d年%d月%d日”,…)。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值