久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2413|回復(fù): 0
收起左側(cè)

STM32中的memcpy函數(shù)的使用

[復(fù)制鏈接]
ID:55476 發(fā)表于 2020-8-24 19:57 | 顯示全部樓層 |閱讀模式
1 簡述
     最近在用JY61做一個傾角項目。剛好商家那里有個示例代碼有寫這個函數(shù)。正好給大家講下這個函數(shù)是怎么用的。





上面這個圖呢,是我從商家那里截取出來的。什么意思呢我下面給大家講下。

2 memcpy定義是什么?
       memcpy 函數(shù)用于 把資源內(nèi)存(src所指向的內(nèi)存區(qū)域) 拷貝到目標(biāo)內(nèi)存(dest所指向的內(nèi)存區(qū)域);拷貝多少個?有一個size變量控制拷貝的字節(jié)數(shù);

函數(shù)原型:void *memcpy(void *dest, void *src, unsigned int count);

      簡單來說呢就是把void *src內(nèi)的數(shù)據(jù)復(fù)制到void *dest里面。unsigned int count這個的意思就是說要從void *src復(fù)制多少個字節(jié)的數(shù)據(jù)到void *dest。

3 用法
      可以拷貝任何類型的對象,因為函數(shù)的參數(shù)類型是void*(未定義類型指針),也就是說傳進(jìn)去的實參可以是int*,short*,char*等等,但是由于函數(shù)拷貝的過程是一個字節(jié)一個字節(jié)的拷貝的,所以實際操作的時候要把void*強(qiáng)制轉(zhuǎn)化為char*,這樣在指針加的時候才會保證每次加一個字節(jié)

4 實際應(yīng)用示例
[backcolor=inherit !important]void *[backcolor=inherit !important]memcpy1[backcolor=inherit !important]([backcolor=inherit !important]void *desc[backcolor=inherit !important],[backcolor=inherit !important]const [backcolor=inherit !important]void * src[backcolor=inherit !important],size_t size[backcolor=inherit !important])[backcolor=inherit !important]{ [backcolor=inherit !important]if[backcolor=inherit !important]([backcolor=inherit !important](desc == [backcolor=inherit !important]NULL[backcolor=inherit !important]) && [backcolor=inherit !important](src == [backcolor=inherit !important]NULL[backcolor=inherit !important])[backcolor=inherit !important])[backcolor=inherit !important]//判斷desc和src是不是空的。 [backcolor=inherit !important]{  [backcolor=inherit !important]return [backcolor=inherit !important]NULL[backcolor=inherit !important]; [backcolor=inherit !important]} [backcolor=inherit !important]unsigned [backcolor=inherit !important]char *desc1 = [backcolor=inherit !important]([backcolor=inherit !important]unsigned [backcolor=inherit !important]char*[backcolor=inherit !important])desc[backcolor=inherit !important]; [backcolor=inherit !important]unsigned [backcolor=inherit !important]char *src1 = [backcolor=inherit !important]([backcolor=inherit !important]unsigned [backcolor=inherit !important]char*[backcolor=inherit !important])src[backcolor=inherit !important]; [backcolor=inherit !important]while[backcolor=inherit !important](size-- >[backcolor=inherit !important]0[backcolor=inherit !important]) [backcolor=inherit !important]{  *desc1 = *src1[backcolor=inherit !important];  desc1++[backcolor=inherit !important];  src1++[backcolor=inherit !important]; [backcolor=inherit !important]} [backcolor=inherit !important]return desc[backcolor=inherit !important];[backcolor=inherit !important]}[backcolor=inherit !important]int [backcolor=inherit !important]_tmain[backcolor=inherit !important]([backcolor=inherit !important]int argc[backcolor=inherit !important], _TCHAR* argv[backcolor=inherit !important][[backcolor=inherit !important]][backcolor=inherit !important])[backcolor=inherit !important]{ [backcolor=inherit !important]int dest[backcolor=inherit !important][[backcolor=inherit !important]2[backcolor=inherit !important]] = [backcolor=inherit !important]{[backcolor=inherit !important]0[backcolor=inherit !important]}[backcolor=inherit !important]; [backcolor=inherit !important]const [backcolor=inherit !important]char src[backcolor=inherit !important][[backcolor=inherit !important]5[backcolor=inherit !important]] = [backcolor=inherit !important]"1234"[backcolor=inherit !important]; [backcolor=inherit !important]//printf(src); [backcolor=inherit !important]memcpy1[backcolor=inherit !important](dest[backcolor=inherit !important],src[backcolor=inherit !important],[backcolor=inherit !important]sizeof[backcolor=inherit !important](src[backcolor=inherit !important])[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]//*(dest+5) = '/0'; [backcolor=inherit !important]printf[backcolor=inherit !important]([backcolor=inherit !important]([backcolor=inherit !important]char *[backcolor=inherit !important])dest[backcolor=inherit !important])[backcolor=inherit !important]; [backcolor=inherit !important]int m = -[backcolor=inherit !important]1[backcolor=inherit !important]; [backcolor=inherit !important]return [backcolor=inherit !important]0[backcolor=inherit !important];[backcolor=inherit !important]}
5注意事項
     (1)void* 一定要返回一個值(指針),這個和void不太一樣

     (2)首先要判斷指針的值不能為空,desc為空的話肯定不能拷貝內(nèi)存空間,src為空相當(dāng)于          沒有拷貝;所以之間return掉;

    (3)""空串是指內(nèi)容為0,NULL是0,不是串;兩個不等價;

    (4)int dest[2] = {0};這是對int 類型的數(shù)組初始化的方法;如果是char類型,就用char a[5] = "1234";  注意數(shù)組下標(biāo)要 多于實際看到的字符數(shù),因為還有'/0'

   (5)printf((char *)dest);這句話,是把 char 類型 src 傳到 int 類型的 dest的內(nèi)存強(qiáng)制轉(zhuǎn)化成char類型,然后打印出來 因為直接看int類型的dest是看不到里面的內(nèi)容的;因為有unsigned char *desc1 = (unsigned char*)desc;所以字符可以傳到dest里面保存起來,dest所指向的內(nèi)存長度4個字節(jié),強(qiáng)制轉(zhuǎn)化為char 就是把四個字節(jié)分成一個一個的字節(jié),這樣就可以看到一個個字符了,如果定義成char dest[5] = "1234";就不用轉(zhuǎn)化;

   (6)memcpy1(dest,src,sizeof(src));注意里面的sizeof(src),這個是包括字符串的結(jié)束符'/0'的;所以不用擔(dān)心printf(dest);但是如果用memcpy1(dest,src,4);沒有'/0'就要*(dest+5) = '/0';這樣保證是一個完整的字符串;

   (7)如果初始化的時候:

char dest[1024] = "12345666";//{0};

const char src[5] = "3333";

           那么拷貝的時候,如果用memcpy1(dest,src,sizeof(src));則printf(dest);出來是333;  如果memcpy1(dest,src,4);則printf(dest);出來是33335666;因為上面的sizeof(src),包含'/0',所以拷貝過去的字符串以'/0' 結(jié)束,就只有3333,而如果傳4個字符,'/0'是第五個字符,那就遇到dest[1024] 的'/0'結(jié)束,所以是33335666字符串的'/0'問題一定要注意啊!!!

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 午夜噜噜噜 | 美女视频久久 | 黄色毛片免费看 | www日日日 | 天堂视频中文在线 | 亚洲日本欧美日韩高观看 | 91亚洲国产 | 日韩精品一区二区三区老鸭窝 | 久久久不卡网国产精品一区 | 欧美日韩看片 | 啪啪毛片| 国产九九精品 | 91精品久久久久 | 国产美女视频一区 | 久草院线 | 视频在线亚洲 | 亚洲经典一区 | 日韩久草 | 天天综合国产 | 另类亚洲视频 | 久久日韩粉嫩一区二区三区 | 天天操天天插 | 自拍偷拍精品 | 一区二区三区四区国产 | 在线视频一区二区三区 | 97精品久久 | 久久久无码精品亚洲日韩按摩 | 久久日韩精品一区二区三区 | 狠狠撸在线视频 | 久久人| 69av网 | 国产一区日韩在线 | 久久精品电影 | 丁香久久| 欧美亚洲在线视频 | 久久久久久亚洲精品 | 九九综合九九 | 国产成人精品一区二 | 欧美成人h版在线观看 | 99精品视频一区二区三区 | 日本一本视频 |