一个程序TC与VC++不同结果的困惑

nihaoma008 2004-08-30 07:55:06
#include <iostream>
using namespace std;
void cpy(char*, const char*);

int main()
{ const char* s = "ABCDEFG";
char* ss = "ZZZZZZZZZZ";
cout << " s = [" << s << "], ss = [" << ss << "]\n";
cpy(ss,s);
cout << " s = [" << s << "], ss = [" << ss << "]\n";
}

void cpy(char* s1, const char* s2)
{ do *s1++ = *s2++;
while (*s2);
}

这个程序为什么在 TC3 中运行正常,而在 VC++ 中提示错误?有什么办法能使它在 VC++ 中也能正常运行?
...全文
138 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
whyglinux 2004-09-06
  • 打赏
  • 举报
回复
现在的编译器一般都把 const char* s = "ABCDEFG"; char* ss = "ZZZZZZZZZZ";中的字符串当作常量字符串来处理,即不允许通过指针改变它们。然而,在一些老式的编译器中,例如TC2.0,是把这些字符串作为非常量字符串来处理的,可以改变它们。
iwdc 2004-09-06
  • 打赏
  • 举报
回复
up
abitz 2004-08-30
  • 打赏
  • 举报
回复
》》有点不大同意 abitz关于

》》char* ss = "ZZZZZZZZZZ";中ss并不一定指向一个可写的空间。

》》的看法

请看标准中关于字面字符串常量的存储说明。
这里ss的实际型别应为char const *,但C++为了和已有的C程序兼容才允许了这种写法。
如不同意请给出理由。
hcj2002 2004-08-30
  • 打赏
  • 举报
回复
跟编译系统内部的东西有关,二者相关的处理不同
oldmanpushcart 2004-08-30
  • 打赏
  • 举报
回复
有点不大同意 abitz关于

char* ss = "ZZZZZZZZZZ";中ss并不一定指向一个可写的空间。

的看法
abitz 2004-08-30
  • 打赏
  • 举报
回复
这个程序本身是不正确的。char* ss = "ZZZZZZZZZZ";中ss并不一定指向一个可写的空间。
向这个地址写入,其结果是未定义的。另外,改成char ss[]也并不一定安全,如果ss的长度小于s,那么会发生溢出。一个安全的cpy函数应该还有一个最大长度参数,如标准库中的strncpy。
ma100 2004-08-30
  • 打赏
  • 举报
回复
char* ss 是常数
该为char ss[]

64,649

社区成员

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

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