C語言內存操作函數詳解
頭文件:#include<memory.h>
1.memcpy
作用:內存拷貝
函數原型:
void *memcpy( void *dest, const void *src, size_t count );
使用:
使用格式:memcpy(目的地,原,想操作內存大小(單位字節))
把 “參數2” 起始的 “參數3” 個字節 內容拷貝到 “參數1 ‘
memecpy函數類似於strncpy。
例:
#include <memory.h> #include <string.h> #include <stdio.h> int main() { int aa[] = { 1,2,3,4 }; int bb[10] = { 0 }; memcpy(bb, aa, 4 * sizeof(int));//把aa數組中4*4(每個int類型是4字節)內容拷貝到bb數組 for (int i = 0; i < 10; i++) //打印bb數組全部數據 { printf("%d ", bb[i]); } }
最後bb字符串中前4*4個字節的內容被改為aa的內容
註意 :memcpy不能拷貝重疊內存。
#include <memory.h> #include <string.h> #include <stdio.h> int main() { int aa[] = { 1,2,3,4,5,6,7,8,9,10 }; my_memcpy(aa + 2, aa, 24); for (int i = 0; i < 10; i++) { printf("%d ", aa[i]); } }
輸出:
拷貝重疊內存會出現這樣的問題。
2.memmove
作用:內存拷貝(可拷貝重疊內存)
原型:
void *memmove( void *dest, const void *src, size_t count );
使用與memcpy一樣,隻是memmove可以拷貝重疊內存
#include <memory.h> #include <string.h> #include <stdio.h> int main() { int aa[] = { 1,2,3,4,5,6,7,8,9,10 }; memmove(aa + 2, aa, 24); for (int i = 0; i < 10; i++) { printf("%d ", aa[i]); } }
出:
同樣的代碼使用memmove就可以.
3.memcmp
作用:內存比較
函數原型:
int memcmp( const void *buf1, const void *buf2, size_t count );
使用:
使用格式:memcmp(地址1,地址2,想要比較的內存大小 單位bit)
逐字節比較內存大小,
逐字節一對一對比較!!
返回值有三種情況:
<0 “參數1” 與 “參數2” 逐字節比較時遇到的第一對不同的內存時 “參數1” 中數據 < “參數2”。
=0 “參數1” 與 “參數2” 中的前“ 參數” 三個字節的內容完全相等。
>0 “參數1” 與 “參數2” 逐字節比較時遇到的第一對不同的內存時 “參數1” 中數據 > “參數2”。
4.memset
作用:內存設置
函數原型:
void *memset( void *dest, int c, size_t count );
使用:
使用格式:memset(地址,一個數,設置多少字節)
例:
#include <memory.h> int main() { int a[] = {1,2,3,4,5}; memset(a, 1, 20);//把從a開始的前二十個字節內容改成1 }
結果:
總結
本篇文章就到這裡瞭,希望能夠給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!