逆序字符串的错误

xlhnuaa 2012-06-28 04:22:37
我想实现将字符串逆序的功能,但是编程如下出现错误,大概是和内存有关,但是不知道详细地该怎么改,以及具体的原因。请帮忙。
void Func(char* str)
{
int len=strlen(str);
char* p1=str;
char* p2=str+len-1;
char temp;
while(p1<p2)
{
temp=*p1;
*p1=*p2;//这句出错
*p2=temp;
p1++;
p2--;
}

}
...全文
109 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xlhnuaa 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

char* st="1234567";是字面值常量,"1234567"保持在了代码段,代码段是只读的,不可修改的
而st指向这一个只读区域 传入func内 并进行*p1=*p2 这一句试图改变只读段的内容,所以出段错误。
char st[]="1234567"此时 "1234567"保存在了数组中,数组在栈内存中,栈内存是可以读写的,赋操作是允许的,就像 char st[8]={'1','2……
[/Quote]
谢谢你哈。。
kllll1119 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
引用 2 楼 的回复:

在func中 这样计算长度是不行的
int len=strlen(str);


这是可以的,因为str指向的是实际的字符串
[/Quote]

可以的,别误认子弟了。
楼上正解
tongzhipeng5699 2012-06-28
  • 打赏
  • 举报
回复
char* st="1234567";是字面值常量,"1234567"保持在了代码段,代码段是只读的,不可修改的
而st指向这一个只读区域 传入func内 并进行*p1=*p2 这一句试图改变只读段的内容,所以出段错误。
char st[]="1234567"此时 "1234567"保存在了数组中,数组在栈内存中,栈内存是可以读写的,赋操作是允许的,就像 char st[8]={'1','2','3','4','5','6','7','\0'}; st[0]='a';这样的操作是天经地义一样。
[Quote=引用 4 楼 的回复:]
引用 1 楼 的回复:

这段程序是没错的

可能是传的参数有问题
C/C++ code
char s[] = "1234567";
func(s); // 这种写法没问题
char *st = "1234567";
func(st); // 这种就可能会出问题


我试了一下你的说法,发现是对的。可是为什么
char *st = "1234567";
func(st……
[/Quote]
xlhnuaa 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

这段程序是没错的

可能是传的参数有问题
C/C++ code
char s[] = "1234567";
func(s); // 这种写法没问题
char *st = "1234567";
func(st); // 这种就可能会出问题
[/Quote]

我试了一下你的说法,发现是对的。可是为什么
char *st = "1234567";
func(st); // 这种写法就会有问题呢?是因为没有个st分配内存吗?可是st不是已经有“1234567”了吗?
iEverX 2012-06-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]

在func中 这样计算长度是不行的
int len=strlen(str);
[/Quote]

这是可以的,因为str指向的是实际的字符串
C__Allen 2012-06-28
  • 打赏
  • 举报
回复
在func中 这样计算长度是不行的
int len=strlen(str);
iEverX 2012-06-28
  • 打赏
  • 举报
回复
这段程序是没错的

可能是传的参数有问题
char s[] = "1234567"; 
func(s); // 这种写法没问题
char *st = "1234567";
func(st); // 这种就可能会出问题

64,642

社区成员

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

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