搞了好久好久都没明白这程序问题出在哪?

czysnow 2009-05-24 05:46:30
#include<iostream.h>
void main()
{
int i;
char str[] = "abc";
char *ps = "def";
for (i = 0;i < 3;i++)
{ temp = str[i];
str[i] = *(ps + i);
*(ps + i) = temp;
}
cout<<str<<endl;
cout<<ps<<endl;
}
要把数组与指针存放的内容交换。。
编译通不过。。这是什么原因??
...全文
87 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wcl19870102 2009-05-24
  • 打赏
  • 举报
回复
up
#include <iostream.h>
void main()
{
int i;
char str[] = "abc";
char *ps = "def"; //这样ps是指向常量区的指针,数据不能修改,改成char *ps = new char[4];
for (i = 0;i < 3;i++)
{ temp = str[i];
str[i] = *(ps + i);
*(ps + i) = temp;
}
cout < <str < <endl;
cout < <ps < <endl;
}
pathuang68 2009-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
temp没有定义,且char* ps="def"虽然左侧类型是char×,但是"def"是常量,这是一个知名常量bug,不能直接写入ps的
[/Quote]
说得好!
cxcco1986 2009-05-24
  • 打赏
  • 举报
回复
你的temp 没有声明就使用了
  • 打赏
  • 举报
回复

#include <iostream.h>
void main()
{
int i;
char str[] = "abc";
char *ps = "def"; //这样ps是指向常量区的指针,数据不能修改,改成char *ps = new char[4];
for (i = 0;i < 3;i++)
{ temp = str[i];
str[i] = *(ps + i);
*(ps + i) = temp;
}
cout < <str < <endl;
cout < <ps < <endl;
}
Maxwell 2009-05-24
  • 打赏
  • 举报
回复
ps指向的是一个常量,要修改常量出错是很正常的。
pengzhixi 2009-05-24
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 goodname 的回复:]
char ps[] = "def";
[/Quote]

up
windsting 2009-05-24
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 arong1234 的回复:]
temp没有定义,且char* ps="def"虽然左侧类型是char×,但是"def"是常量,这是一个知名常量bug,不能直接写入ps的
[/Quote]
学习了,在书上看到好几次关于"def"这种形式被编译器偷偷的弄成char*是个臭名昭著的问题,
可我没见过这个问题暴露出来,今儿才第一次见了,还被你讲的这么透彻,thx。
chenzhp 2009-05-24
  • 打赏
  • 举报
回复
你的temp是哪儿定义的??
goodname 2009-05-24
  • 打赏
  • 举报
回复
char ps[] = "def";
arong1234 2009-05-24
  • 打赏
  • 举报
回复
temp没有定义,且char* ps="def"虽然左侧类型是char×,但是"def"是常量,这是一个知名常量bug,不能直接写入ps的

64,680

社区成员

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

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