新手问个c_str问题

fansses 2006-09-09 06:17:54
#include <string>

#include <iostream>

using namespace std;

int main(){
string abc="oh my god!";
char *name;
strcpy(name,abc.c_str());

cout<<*name;

}

第一:name不是只是申明了一个指针,并没有分配空间吗,那么strcpy怎么能把abc的内容copy过去?

第二:c_str()后只是char字符嘛,怎么能把一串字符串"oh my god!"转换呢,因为有个函数是void ma(char *)。

第三,abc被c_str()后,成为const char * 不能直接用于(char *) 这应该怎么解决
...全文
963 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
晨星 2006-09-09
  • 打赏
  • 举报
回复
呵呵,Kenmark又发飚了。
咦?为什么要说“又”呢?
OOPhaisky 2006-09-09
  • 打赏
  • 举报
回复
string abc="oh my god!";
char *name;
strcpy(name,abc.c_str());
--------------------------------
错了,name并没有分配空间,改为:
string abc="oh my god!";
char *name = new char[20];//分配空间
strcpy(name,abc.c_str());
改成这样就好了^_^
fansses 2006-09-09
  • 打赏
  • 举报
回复
倒,太极说话真潇洒,,,,强人
cnhgj 2006-09-09
  • 打赏
  • 举报
回复
用得着那么麻烦吗?

string abc="oh my god!";
char *name = const_cast<char*>(abc.c_str());
cout<<name;
fansses 2006-09-09
  • 打赏
  • 举报
回复
哦,,错了,我错了,,解引用用错。。。。。。,,大哥,我不想死。。。。。。。。。。。
我啃 2006-09-09
  • 打赏
  • 举报
回复
#include <string>

#include <iostream>

using namespace std;

int main(){
string abc="oh my god!";
char *name;
strcpy(name,abc.c_str());

cout<<*name;

}

本来就是非法的,怎能拷贝给一个没有内存的野地址??你想死啊!
abc.c_str()返回一个它自己的使用内存的地址(一个C-STYLE的string——)
会自动给最后添上一个'\0'结束符号
然后你的cout<<*name;只是打印第一个字符

关于问题二,string给你C-STYLE地址的代价就是不让你随意修改,否则会造成string内部的不稳定,所以要修改的话一般都是用string提供的函数修改,如果一定要用C-STYLE的字符串则要先产生副本
fansses 2006-09-09
  • 打赏
  • 举报
回复
第三的本意不是说叫函数参数申明定const char * 比如要在函数体内修改参数的内容,这里的const申明就。。。

65,187

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧