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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如圖,請(qǐng)教一下關(guān)于memcpy()函數(shù)

如圖,請(qǐng)教一下關(guān)于memcpy()函數(shù)

這個(gè)程序說(shuō)memcpy()函數(shù),當(dāng)源內(nèi)存塊與目標(biāo)內(nèi)存塊重疊時(shí),將會(huì)覆蓋掉原來(lái)了數(shù)據(jù),我運(yùn)行的時(shí)候沒(méi)覆蓋啊,是可能覆蓋嗎?一下是運(yùn)行結(jié)果。
查看完整描述

2 回答

?
郎朗坤

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊

取決于編譯器memcpy實(shí)現(xiàn)的方式

一般有三種,從頭復(fù)制 從尾復(fù)制 或者判斷復(fù)制(等同于memmove)

仿照你的 我寫(xiě)了一個(gè)測(cè)試程序


char message2[60] = "abcdefghijklmnopqrstuvwxyz";char tmp[60];int main(){    strcpy(tmp, message2);    printf("tmp= \"%s\"\n", tmp);    memcpy(tmp+4, tmp + 16, 10);    printf("memcpy(tmp+4, tmp + 16, 10);> tmp = \"%s\"\n", tmp);    strcpy(tmp, message2);    memcpy(tmp+6, tmp +4, 10);    printf("memcpy(tmp+6, tmp +4, 10);> tmp = \"%s\"\n", tmp);    strcpy(tmp, message2);    memcpy(tmp+4, tmp +6, 10);    printf("memcpy(tmp+4, tmp +6, 10);> tmp = \"%s\"\n", tmp);     }

測(cè)試結(jié)果如下

tmp= "abcdefghijklmnopqrstuvwxyz"

memcpy(tmp+4, tmp + 16, 10);> tmp = "abcdqrstuvwxyzopqrstuvwxyz"

memcpy(tmp+6, tmp +4, 10);> tmp = "abcdefefefijijmnqrstuvwxyz"

memcpy(tmp+4, tmp +6, 10);> tmp = "abcdghijklmnopopqrstuvwxyz"

可以看到 在memcpy(tmp+6, tmp +4, 10);時(shí)出現(xiàn)了覆蓋 efefef

說(shuō)明我的編譯器(gcc)在做memcpy的時(shí)候使用的是頭復(fù)制 即從起始地址開(kāi)始復(fù)制

如果這個(gè)不出錯(cuò) 而memcpy(tmp+4, tmp +6, 10);出錯(cuò) 那么就是尾復(fù)制

都不出錯(cuò)的話 那么就是判斷之后智能復(fù)制 相當(dāng)于memmove



查看完整回答
反對(duì) 回復(fù) 2022-03-23
?
忽然笑

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊

該例子說(shuō)明幾個(gè)問(wèn)題
1. mem開(kāi)頭的函數(shù)基本上都是對(duì)內(nèi)存操作的,
它們不管內(nèi)存里放的是什么數(shù)據(jù),只要給出長(zhǎng)度,它們就操作。
不像strcpy、strcmp等函數(shù)一定以'\0'結(jié)尾,而且是字符。
mem可以操作可見(jiàn)字符、不可見(jiàn)字符、控制字符等,任意數(shù)據(jù)都可以。
2. memcpy是內(nèi)存復(fù)制函數(shù)
原型:
void * memcpy(void *dest, void const *src, unsigned int length);
功能:從src的起始位置復(fù)制length個(gè)字節(jié)到dst的內(nèi)存起始位置。你可以用這種
方法復(fù)制任何類型的值,第3個(gè)參數(shù)指定復(fù)制值的長(zhǎng)度(以字節(jié)計(jì))。
如果src和dst以任何形式出現(xiàn)了重疊,它的結(jié)果是未定義的。
3. memset函數(shù)
原型:void * memset(void *a, int val, unsigned int length);
功能:把從a開(kāi)始的length個(gè)字節(jié)都設(shè)置為值val。
例子:memset(buffer, 0, SIZE);



查看完整回答
反對(duì) 回復(fù) 2022-03-23
  • 2 回答
  • 0 關(guān)注
  • 213 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)