char *问题

Tiger-3D 2011-05-14 08:43:55

#include<iostream>
using namespace std ;

#define ARRAY 100

int main()
{
int i(0) ;
char *s = new char[ARRAY] ;

for (i = 0 ; i < ARRAY ; ++i)
s[i] = '\0' ;

s = "just for a try !" ;
cout <<strlen(s) <<endl ;
cout <<s <<endl ;


delete []s ;
return 0 ;
}



运行结果:长度为 16 ,输出:just for a try ! 然后报错,是delete错误。为什么s不可以这样赋值。
...全文
85 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
hondely 2011-05-14
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090805/16/c5558155-0497-422b-bc6b-3740a044ddde.html
qq120848369 2011-05-14
  • 打赏
  • 举报
回复
s存放的地址已经丢失了。。。。内存已经泄露了。。。。你拥有的只是一个常量字符串。。。。
ryfdizuo 2011-05-14
  • 打赏
  • 举报
回复
    char *s = new char[ARRAY] ;

for (i = 0 ; i < ARRAY ; ++i)
s[i] = '\0' ;

strcpy (s,"just for a try !");
cout <<strlen(s) <<endl ;
cout <<s <<endl ;
delete[] s;

hondely 2011-05-14
  • 打赏
  • 举报
回复
同二楼
ljt3969636 2011-05-14
  • 打赏
  • 举报
回复
晕,没注意,对不起

s = "just for a try !" ;之后s的地址是字符串常量just for a try 的地址了,不是你new的,你delete是非法的。

实在抱歉~~~
qq376472696qq 2011-05-14
  • 打赏
  • 举报
回复
s = "just for a try !" ;是把后面字符串的首地址赋给s,此时s已经指向字符常量区,当然不能释放,你可以单步调试下,两次s的地址不同
ljt3969636 2011-05-14
  • 打赏
  • 举报
回复
没什么问题

就是这句

for (i = 0 ; i < ARRAY ; ++i)
s[i] = '\0' ;
下次用memset就好,效率高些,你这样也没问题

64,682

社区成员

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

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