#include#include#includeintgetmax(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);}
2 回答
蛊毒传说
TA贡献1895条经验 获得超3个赞
char*str="123";char*str2="456";这样申请的2个字符串,实际上是2个指针str和str2分别指向了2个字符串常量。所以当你执行这段代码的时候:memcpy(a,b,max);memcpy(b,t,max);均会报错,因为你试图去修改字符串常量。另外如果你给出的2个字符串长度不一样,你的程序一样会出错,这个留给你自己思考解决吧
慕娘9325324
TA贡献1783条经验 获得超4个赞
如果只想编译通过的话可以做如下修改:char*str="123";char*str2="456";修改成charstr1[]="123";charstr2[]="456";其次memcpy在拷贝时不应该两次都用max,应该一次la一次用lb,你仔细琢磨是不是这个道理.memcpy前是不是要检查各自大小,比如charstr1[3]="12"str2[4]="123",这样交换就存在问题吧?以上回答知识抛砖引玉,肯定还有很多没考虑到的地方。
添加回答
举报
0/150
提交
取消