免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123下一页
最近访问板块 发新帖
查看: 43306 | 回复: 24
打印 上一主题 下一主题

这样把string转换到char*呢 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-04-07 10:08 |只看该作者 |正序浏览
我用呢C_STR().但编译器说不能把const char* 转换到char*啊

论坛徽章:
0
25 [报告]
发表于 2008-05-22 12:47 |只看该作者
原帖由 flw 于 2004-4-8 15:38 发表
用 strcpy

char cstr1[80];
string str2;

......

strcpy( cstr1, str2.c_str() );

这样子就可以了。

如果这个string经常变化的话,每改变一次都要重新拷贝一次,效率上有点。。。。。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
24 [报告]
发表于 2004-04-10 00:31 |只看该作者

这样把string转换到char*呢

原帖由 "win_hate" 发表:
熬夜对身体不利啊,猫头鹰例外。

老兄那个即时通信的项目怎么样了?

太懒了,进步很慢。
最近有了一些新思路,但是也没有仔细想。

论坛徽章:
0
23 [报告]
发表于 2004-04-10 00:29 |只看该作者

这样把string转换到char*呢

熬夜对身体不利啊,猫头鹰例外。

老兄那个即时通信的项目怎么样了?

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
22 [报告]
发表于 2004-04-10 00:26 |只看该作者

这样把string转换到char*呢

[quote]原帖由 "win_hate"]应改是这样的,还是老兄头脑比较清醒。[/quote 发表:

呵呵,我的早晨从中午开始,
每天早上睡到 10 点多,等上班就 11 点多了,所以熬夜是擅长。

论坛徽章:
0
21 [报告]
发表于 2004-04-10 00:24 |只看该作者

这样把string转换到char*呢

应该是这样的,还是老兄头脑比较清醒。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
20 [报告]
发表于 2004-04-10 00:13 |只看该作者

这样把string转换到char*呢

这个没有关系的,
例子:

char *ptr;
const char *cptr;

ptr = (char *) malloc( 1024 );  // 为便于描述,称这段内存为 mem
cptr = (const char *)ptr;

cptr 是一个常量指针,“指向的内存没法修改”这句话的意思实际上是说,“指向的内存没法通过 p 来修改”,但是可以通过其它的指针来修改。

而且,这种修改到底会不会出问题,是由 mem 本身的特性来决定的,将来就算是出了问题,也肯定是 ptr 这个指针出了问题,也绝对不会是 cptr 这个指针出问题。

既然不是 cptr 的原因,那么 cptr = (const char *)ptr; 就是合法的。
如果要说不合法,那么只能说 ptr 从一开始就指向了一个不合法的内存,并且在以后修改了它。整个过程和 cptr 毫无任何关系。

论坛徽章:
0
19 [报告]
发表于 2004-04-10 00:10 |只看该作者

这样把string转换到char*呢

呵呵,也有可能他把指针的赋指打成了复制。

论坛徽章:
0
18 [报告]
发表于 2004-04-10 00:07 |只看该作者

这样把string转换到char*呢

没错,我指的是“复制”行为,而不是“类型转换”行为。因为非const类型到const类型的转换是自动进行的,不需要显式转换。如你上面的给出的
  p = (const char *)astring.c_str();
完全可以写成
  p = astring.c_str();

还有,求贤若渴 提到的“复制”,可能在概念上有错误,他可能认为 const char* p = (const char *)astring.c_str(); 就是字符串的“复制”,所以有必要进行类型转换。win_hate不要受他的影响。

其实用 strcpy 对 astring.c_str() 字符串复制的时候没有必要进行类型转换的。

论坛徽章:
0
17 [报告]
发表于 2004-04-10 00:06 |只看该作者

这样把string转换到char*呢

原帖由 "flw" 发表:

p 到底指向谁,是可以修改的,但是 p 指向的内容,是不可以修改的。
所以,
const char *p;
p = (const char *)astring.c_str();
不会有任何隐患。


那段话的有个前提,
>;>; 如果类的内部定义成char *,要对外部的一个const char *复制是,就可以这样进行转换 (const char *)astring.c_str()


在执行p = (const char *)astring.c_str(); 后,就把 p 指向了一个实际可改的内存。

我觉得这会使编译器产生混淆。我再看看?
  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP