请教字符串反转问题(char *reverse(char *str) )

jscn123789abc 2008-07-13 08:03:28
下面的代码,执行到*(str+i) = *(str+len-1-i)时,
出现系统错误,
不知道怎么解决?
请大家提一些解决问题的建议,谢谢!

//字符串反转
char *reverse(char *str)
{
int len = strlen(str);
char temp ;
for(int i=0; i <len/2; i++)
{
temp = *(str+i);
*(str+i) = *(str+len-1-i); //执行到该行出现系统错误
*(str+len-1-i) = temp;
}
return str;
}

// 主函数void main()
{ char *p =new char;
char *q=new char;
p="abcde";
q = reverse(p);
cout < <*q;
delete p;
delete q;
}
...全文
270 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
skineffect 2008-07-13
  • 打赏
  • 举报
回复
1楼的解答在dev C++上运行正确。
楼主的错误存在于 char *p =new char; char *q=new char; 两句上。因为这样的指代p仅代表一个字符的地址,而不是字符数组的首地址,要写成char *p =new char[20];char *q=new char[20];的形式。
其实用string会更简单,不用考虑这些问题,代码如下:
#include <string>
#include <iostream>
using namespace std;
string reverse(string str)
{
int len = str.size();
char temp;
for(int i=0; i <len/2; i++)
{
temp = str[i];
str[i] = str[len-1-i];
str[len-1-i] = temp;
}
return str;
}


int main()
{
string p("abcde");
string q;
q = reverse(p);
cout <<q;
return 0;
}



jscn123789abc 2008-07-13
  • 打赏
  • 举报
回复
谢谢k2eats 朋友的帮助
我把q指针去掉可以正常运行啦。
diaopan1985 2008-07-13
  • 打赏
  • 举报
回复
楼上的解答存在运行时错误。
K行天下 2008-07-13
  • 打赏
  • 举报
回复

#include <string.h>
#include <iostream.h>
char *reverse(char *str)
{
int len = strlen(str);
char temp ;
for(int i=0; i <len/2; i++)
{
temp = *(str+i);
*(str+i) = *(str+len-1-i); //执行到该行出现系统错误
*(str+len-1-i) = temp;
}
return str;
}

// 主函数
int main()
{
char *p =new char[20];//注意小
char *q=new char[20];
strcpy(p,"abcde");//这样副职
q = reverse(p);
cout <<p;
delete[] p;
delete[] q;
}

64,648

社区成员

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

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