请教下字符指针的问题

zwfgdlc 2008-10-03 04:03:22
本人初学C++,有几句很简单的代码想请教各位.

#include "stdafx.h"
#include <iostream>

using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char * txt=new char[64];

strcpy_s(txt,63,"ABCDEFG");
cout<<txt<<endl;
delete [] txt;

txt="123456789";
cout<<txt<<endl;

cin.get();
return 0;
}

以上代码运行正常.

#include "stdafx.h"
#include <iostream>


using namespace std;

int _tmain(int argc, _TCHAR* argv[])
{
char * txt=new char[64];

txt="123456789";
cout<<txt<<endl;

strcpy_s(txt,63,"ABCDEFG");
cout<<txt<<endl;
delete [] txt;

cin.get();
return 0;
}


便改改成这样就出错了.什么原因?
...全文
55 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zwfgdlc 2008-10-03
  • 打赏
  • 举报
回复
明白,谢谢两位,
csucdl 2008-10-03
  • 打赏
  • 举报
回复
1)尽量使用静态数组。
2)尽量使用stl容器。
3)尽量使用atl容器。

所以你的程序可以稍微改动为
1)
string sText("ABCDEFG");
cout << sText;

2)
CVectorPtr<char> sText(new char[]);

brookmill 2008-10-03
  • 打赏
  • 举报
回复
第二段代码除了strcpy出错,delete也有问题,因为执行到delete的时候,txt已经指向了常量区,而不再是当初分配的64字节的位置了。
brookmill 2008-10-03
  • 打赏
  • 举报
回复
txt="123456789";
实际上,这是改变了txt的值,把txt指向了常量区。
这样有两个后果:
1. 用strcpy修改txt内容的时候出错,因为常量区不允许修改;
2. 分配的64个字节内存泄漏。

64,639

社区成员

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

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