一个程序,总是段错误,希望能帮我看下哪里有问题?

#include
#include
#include
intgetmax(inta,intb)
{
if(a>b)
{
returna;
}else
{
returnb;
}
}
voidswap(void*a,void*b)
{
void*tmp;
intla=sizeof(a);
intlb=sizeof(b);
intmax=getmax(la,lb);
void*t=(void*)malloc(max);
if(t==NULL)
{
printf("%s\n","错误");
exit(0);
}
memcpy(t,a,max);
memcpy(a,b,max);
memcpy(b,t,max);
printf("%d\n",sizeof(a));
printf("%d\n",sizeof(b));
printf("%d\n",max);
free(t);
}
intmain()
{
char*str="123";
char*str2="456";
swap((void*)str,(void*)str2);
printf("%s\n",str);
printf("%s\n",str2);
}
ABOUTYOU
浏览 413回答 2
2回答

蛊毒传说

char*str="123";char*str2="456";这样申请的2个字符串,实际上是2个指针str和str2分别指向了2个字符串常量。所以当你执行这段代码的时候:memcpy(a,b,max);memcpy(b,t,max);均会报错,因为你试图去修改字符串常量。另外如果你给出的2个字符串长度不一样,你的程序一样会出错,这个留给你自己思考解决吧

慕娘9325324

如果只想编译通过的话可以做如下修改:char*str="123";char*str2="456";修改成charstr1[]="123";charstr2[]="456";其次memcpy在拷贝时不应该两次都用max,应该一次la一次用lb,你仔细琢磨是不是这个道理.memcpy前是不是要检查各自大小,比如charstr1[3]="12"str2[4]="123",这样交换就存在问题吧?以上回答知识抛砖引玉,肯定还有很多没考虑到的地方。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript