以下交换字符串的程序到底哪里错了

hujiiori 2004-08-02 09:15:50
帮我看看以下交换字符串的程序到底哪里错了,编译通过,运行时出现错误.

#include<iostream.h>
#include<string.h>

int stringswp(char * i,char * j){
char temp[100];
strcpy(temp,i);
strcpy(i,j);//好像这句出的错
strcpy(j,temp);
return 0;
}

int main(){
char *p="how are you";
char *q="how you";
stringswp(p,q);
while(*p!='\0'){
cout<<*p;
p++;
}
cout<<endl;
while(*q!='\0'){
cout<<*q;
q++;
}
return 0;
}
...全文
167 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
antijpn 2004-08-02
  • 打赏
  • 举报
回复
不一样,char some[]="str"只是保证了'\0'的空间,而不保证更多的空间给strcpy用
pwtitle 2004-08-02
  • 打赏
  • 举报
回复
一样啊,把指针更换改成strcpy也一样啊。
但直接调换指针效率要高的多吧?
Andy84920 2004-08-02
  • 打赏
  • 举报
回复
哦,知道了....初始化数组大小....
Andy84920 2004-08-02
  • 打赏
  • 举报
回复
可能楼主是想训练strcpy,不然为什么不用string是吧?我想....楼上的程序只
是一个变通的做法...

我还没看到我的程序哪里越界了,我知道是越界了.^_^
Andy84920 2004-08-02
  • 打赏
  • 举报
回复
呵,楼上的只是换了一下指针的指向,不过也行...-_-
pwtitle 2004-08-02
  • 打赏
  • 举报
回复
以上程序已经测试通过,环境Dev-C++ 4.9.10
pwtitle 2004-08-02
  • 打赏
  • 举报
回复
对指针进行引用就可以了
int stringswp(char *&i,char *&j){
char temp[100];
strcpy(temp,i);
strcpy(i,j);//好像这句出的错
strcpy(j,temp);
return 0;
}

你的程序可以优化为:

#include<iostream>

using namespace std;

void stringswp(char *& i,char *& j){
char *temp = i;
i = j;
j = temp;
}

int main(){
char *p="how are you";
char *q="how you";
stringswp(p,q);

cout<<"*p="<<p<<endl;
cout<<"*q="<<q<<endl;

system("PAUSE");
return 0;

}
antijpn 2004-08-02
  • 打赏
  • 举报
回复
楼上的程序和二楼有什么区别吗?看不出来,越界访问了了-_-bbb(修正了旧的错误,引入了新的错误,是不是M$的程序员?)
Andy84920 2004-08-02
  • 打赏
  • 举报
回复
#include<iostream>
#include<cstring>
using namespace std;

int stringswp(const char * i,const char * j)
{
char temp[100];

strcpy(temp,i);
strcpy(const_cast<char *>(i),j);
strcpy(const_cast<char *>(j),temp);

return 0;
}

int main()
{
const char p[]="how are you";
const char q[]="how you";

stringswp(p,q);

const char *pp=p;
const char *pq=q;

while((*pp!='\0')&& (cout << *pp++));
cout<<endl;

while((*pq!='\0')&&(cout << *pq++));
cout << endl;
}

还有一点错误,自己改改...
Andy84920 2004-08-02
  • 打赏
  • 举报
回复
用string不好吗?
hujiiori 2004-08-02
  • 打赏
  • 举报
回复
有这么多错啊……
  • 打赏
  • 举报
回复
就C的特性决定了这样做一定会错。
既然用了C++,何不用std中的string类,本身就有交换功能。
antijpn 2004-08-02
  • 打赏
  • 举报
回复
int stringswp(char * i,char * j){
char *temp;
temp = strdup(i)
j=strdup(i);
i=strdup(j)
return 0;
}



错的,而且内存泄漏了
就算是这样,也要用char**i,char**j为参数
peter9606 2004-08-02
  • 打赏
  • 举报
回复
汗~
antijpn 2004-08-02
  • 打赏
  • 举报
回复
不对的地方多呢,二楼改的也不对,越界访问了
int stringswp(char * i,char * j){
char temp[100];
strcpy(temp,i);
strcpy(i,j);//好像这句出的错
strcpy(j,temp);
return 0;
}
改成
int stringswp(char** i,char** j)
{
char* temp;
temp=*i;
*i=*j;
*j=temp;
return 0;
}


真相重于对错 2004-08-02
  • 打赏
  • 举报
回复
int stringswp(char * i,char * j){
char *temp;
temp = strdup(i)
j=strdup(i);
i=strdup(j)
return 0;
}

ma100 2004-08-02
  • 打赏
  • 举报
回复
p和q都是常量,不能改变
peter9606 2004-08-02
  • 打赏
  • 举报
回复
int main(){
//char *p="how are you";
char p[] ="how are you";
//char *q="how you";
char q[] ="how you";
stringswp(p,q);
while(*p!='\0'){
cout<<*p;
p++;
}
cout<<endl;
while(*q!='\0'){
cout<<*q;
q++;
}
return 0;
}

如果楼主的方法 那么两个指针都没有被分配空间~

64,641

社区成员

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

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