C語言內存操作函數(shù)詳解
頭文件:#include<memory.h>
1.memcpy
作用:內存拷貝
函數(shù)原型:
void *memcpy( void *dest, const void *src, size_t count );
使用:
使用格式:memcpy(目的地,原,想操作內存大?。▎挝蛔止?jié)))

把 "參數(shù)2" 起始的 "參數(shù)3" 個字節(jié) 內容拷貝到 "參數(shù)1 '
memecpy函數(shù)類似于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數(shù)組中4*4(每個int類型是4字節(jié))內容拷貝到bb數(shù)組
for (int i = 0; i < 10; i++) //打印bb數(shù)組全部數(shù)據(jù)
{
printf("%d ", bb[i]);
}
}
最后bb字符串中前4*4個字節(jié)的內容被改為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]);
}
}
輸出:

拷貝重疊內存會出現(xiàn)這樣的問題。
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
作用:內存比較
函數(shù)原型:
int memcmp( const void *buf1, const void *buf2, size_t count );
使用:
使用格式:memcmp(地址1,地址2,想要比較的內存大小 單位bit)

逐字節(jié)比較內存大小,
逐字節(jié)一對一對比較?。?/p>
返回值有三種情況:
<0 “參數(shù)1” 與 “參數(shù)2” 逐字節(jié)比較時遇到的第一對不同的內存時 “參數(shù)1” 中數(shù)據(jù) < “參數(shù)2”。
=0 “參數(shù)1” 與 “參數(shù)2” 中的前“ 參數(shù)” 三個字節(jié)的內容完全相等。
>0 “參數(shù)1” 與 “參數(shù)2” 逐字節(jié)比較時遇到的第一對不同的內存時 “參數(shù)1” 中數(shù)據(jù) > “參數(shù)2”。
4.memset
作用:內存設置
函數(shù)原型:
void *memset( void *dest, int c, size_t count );
使用:
使用格式:memset(地址,一個數(shù),設置多少字節(jié))
例:
#include <memory.h>
int main()
{
int a[] = {1,2,3,4,5};
memset(a, 1, 20);//把從a開始的前二十個字節(jié)內容改成1
}
結果:

總結
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關注腳本之家的更多內容!
相關文章
VSCode 搭建 Arm 遠程調試環(huán)境的步驟詳解
這篇文章主要介紹了VSCode 搭建 Arm 遠程調試環(huán)境的步驟詳解,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-04-04
C/C++通過SQLite SDK實現(xiàn)數(shù)據(jù)庫增刪改查操作
SQLite,作為一款嵌入式關系型數(shù)據(jù)庫管理系統(tǒng),一直以其輕量級、零配置以及跨平臺等特性而備受青睞,本文主要介紹了C++如何通過SQLite SDK實現(xiàn)數(shù)據(jù)庫增刪改查操作,感興趣的可以了解下2023-11-11

