最近在用jy61做乙個傾角專案。剛好商家那裡有個示例**有寫這個函式。正好給大家講下這個函式是怎麼用的。
上面這個圖呢,是我從商家那裡擷取出來的。什麼意思呢***給大家講下。
memcpy 函式用於 把資源記憶體(src所指向的記憶體區域) 拷貝到目標記憶體(dest所指向的記憶體區域);拷貝多少個?有乙個size變數控制拷貝的位元組數;
函式原型:void *memcpy(void *dest, void *src, unsigned int count);
簡單來說呢就是把void *src內的資料複製到void *dest裡面。unsigned int count這個的意思就是說要從void *src複製多少個位元組的資料到void *dest。
可以拷貝任何型別的物件,因為函式的引數型別是void*(未定義型別指標),也就是說傳進去的實參可以是int*,short*,char等等,但是由於函式拷貝的過程是乙個位元組乙個位元組的拷貝的,所以實際操作的時候要把void強制轉化為char*,這樣在指標加的時候才會保證每次加乙個位元組
4 實際應用示例
(1)void* 一定要返回乙個值(指標),這個和void不太一樣void
*memcpy1
(void
*desc,
const
void
* src,size_t size)
unsigned
char
*desc1 =
(unsigned
char
*)desc;
unsigned
char
*src1 =
(unsigned
char
*)src;
while
(size--
>0)
return desc;
}int
_tmain
(int argc, _tchar* ar**)
;const
char src[5]
="1234"
;//printf(src);
memcpy1
(dest,src,
sizeof
(src));
//*(dest+5) = '/0';
printf((
char
*)dest)
;int m =-1
;return0;
}
(2)首先要判斷指標的值不能為空,desc為空的話肯定不能拷貝記憶體空間,src為空相當於 沒有拷貝;所以之間return掉;
(3)""空串是指內容為0,null是0,不是串;兩個不等價;
(4)int dest[2] = ;這是對int 型別的陣列初始化的方法;如果是char型別,就用char a[5] = 「1234」; 注意陣列下標要 多於實際看到的字元數,因為還有』/0』
(5)printf((char )dest);這句話,是把 char 型別 src 傳到 int 型別的 dest的記憶體強制轉化成char型別,然後列印出來 因為直接看int型別的dest是看不到裡面的內容的;因為有unsigned char desc1 = (unsigned char)desc;所以字元可以傳到dest裡面儲存起來,dest所指向的記憶體長度4個位元組,強制轉化為char 就是把四個位元組分成乙個乙個的位元組,這樣就可以看到乙個個字元了,如果定義成char dest[5] = 「1234」;就不用轉化;
(6)memcpy1(dest,src,sizeof(src));注意裡面的sizeof(src),這個是包括字串的結束符』/0』的;所以不用擔心printf(dest);但是如果用memcpy1(dest,src,4);沒有』/0』就要(dest+5) = 『/0』;這樣保證是乙個完整的字串;
(7)如果初始化的時候:
char dest[1024] = 「12345666」;//;
const char src[5] = 「3333」;
那麼拷貝的時候,如果用memcpy1(dest,src,sizeof(src));則printf(dest);出來是333; 如果memcpy1(dest,src,4);則printf(dest);出來是33335666;因為上面的sizeof(src),包含』/0』,所以拷貝過去的字串以』/0』 結束,就只有3333,而如果傳4個字元,』/0』是第五個字元,那就遇到dest[1024] 的』/0』結束,所以是33335666字串的』/0』問題一定要注意啊!!!
STM32復位函式
軟體復位 void g mcureset void 其實hal nvic systemreset是 void hal nvic systemreset void 其實nvic systemreset是 static inline void nvic systemreset void 系統復位 那麼核...
STM32學習之 stm32中C語言的資料型別
stm32 c語言資料型別 在程式設計過程中,不同的cpu,其資料型別的意義各不相同,所以一定要注意相應變數資料型別的定義和轉換,否則在計算中可能會出現不確定的錯誤。一 c語言中的種類資料 整型 int short long 實型 float double stm32中的資料型別非常的多,常用的變數...
STM32中如何使用printf 函式
stm32串列埠通訊中使用printf傳送資料配置方法 開發環境 keil rvmdk 在stm32串列埠通訊程式中使用printf傳送資料,非常的方便。可在剛開始使用的時候總是遇到問題,常見的是硬體訪真時無法進入main主函式,其實只要簡單的配置一下就可以了。下面就說一下使用printf需要做哪些...