第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

一個程序,總是段錯誤,希望能幫我看下哪里有問題?

一個程序,總是段錯誤,希望能幫我看下哪里有問題?

ABOUTYOU 2019-05-13 12:59:34
#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條經(jīng)驗 獲得超3個贊

char*str="123";
char*str2="456";
這樣申請的2個字符串,實際上是2個指針str和str2分別指向了2個字符串常量。
所以當你執(zhí)行這段代碼的時候:
memcpy(a,b,max);
memcpy(b,t,max);
均會報錯,因為你試圖去修改字符串常量。
另外如果你給出的2個字符串長度不一樣,你的程序一樣會出錯,這個留給你自己思考解決吧
                            
查看完整回答
反對 回復 2019-05-13
?
慕娘9325324

TA貢獻1783條經(jīng)驗 獲得超4個贊

如果只想編譯通過的話可以做如下修改:
char*str="123";
char*str2="456";
修改成
charstr1[]="123";
charstr2[]="456";
其次memcpy在拷貝時不應該兩次都用max,應該一次la一次用lb,你仔細琢磨是不是這個道理.memcpy前是不是要檢查各自大小,比如charstr1[3]="12"str2[4]="123",這樣交換就存在問題吧?以上回答知識拋磚引玉,肯定還有很多沒考慮到的地方。
                            
查看完整回答
反對 回復 2019-05-13
  • 2 回答
  • 0 關注
  • 427 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號