C語言內(nèi)存操作函數(shù)詳解
頭文件:#include<memory.h>
1.memcpy
作用:內(nèi)存拷貝
函數(shù)原型:
void *memcpy( void *dest, const void *src, size_t count );
使用:
使用格式:memcpy(目的地,原,想操作內(nèi)存大?。▎挝蛔止?jié)))
把 "參數(shù)2" 起始的 "參數(shù)3" 個(gè)字節(jié) 內(nèi)容拷貝到 "參數(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));//把a(bǔ)a數(shù)組中4*4(每個(gè)int類型是4字節(jié))內(nèi)容拷貝到bb數(shù)組 for (int i = 0; i < 10; i++) //打印bb數(shù)組全部數(shù)據(jù) { printf("%d ", bb[i]); } }
最后bb字符串中前4*4個(gè)字節(jié)的內(nèi)容被改為aa的內(nèi)容
注意 :memcpy不能拷貝重疊內(nèi)存。
#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]); } }
輸出:
拷貝重疊內(nèi)存會(huì)出現(xiàn)這樣的問題。
2.memmove
作用:內(nèi)存拷貝(可拷貝重疊內(nèi)存)
原型:
void *memmove( void *dest, const void *src, size_t count );
使用與memcpy一樣,只是memmove可以拷貝重疊內(nèi)存
#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
作用:內(nèi)存比較
函數(shù)原型:
int memcmp( const void *buf1, const void *buf2, size_t count );
使用:
使用格式:memcmp(地址1,地址2,想要比較的內(nèi)存大小 單位bit)
逐字節(jié)比較內(nèi)存大小,
逐字節(jié)一對(duì)一對(duì)比較!!
返回值有三種情況:
<0 “參數(shù)1” 與 “參數(shù)2” 逐字節(jié)比較時(shí)遇到的第一對(duì)不同的內(nèi)存時(shí) “參數(shù)1” 中數(shù)據(jù) < “參數(shù)2”。
=0 “參數(shù)1” 與 “參數(shù)2” 中的前“ 參數(shù)” 三個(gè)字節(jié)的內(nèi)容完全相等。
>0 “參數(shù)1” 與 “參數(shù)2” 逐字節(jié)比較時(shí)遇到的第一對(duì)不同的內(nèi)存時(shí) “參數(shù)1” 中數(shù)據(jù) > “參數(shù)2”。
4.memset
作用:內(nèi)存設(shè)置
函數(shù)原型:
void *memset( void *dest, int c, size_t count );
使用:
使用格式:memset(地址,一個(gè)數(shù),設(shè)置多少字節(jié))
例:
#include <memory.h> int main() { int a[] = {1,2,3,4,5}; memset(a, 1, 20);//把從a開始的前二十個(gè)字節(jié)內(nèi)容改成1 }
結(jié)果:
總結(jié)
本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!
- C語言深入講解動(dòng)態(tài)內(nèi)存分配函數(shù)的使用
- c語言詳解動(dòng)態(tài)內(nèi)存分配及常見錯(cuò)誤的解決
- C語言深入探索動(dòng)態(tài)內(nèi)存分配的使用
- C語言的動(dòng)態(tài)內(nèi)存分配及動(dòng)態(tài)內(nèi)存分配函數(shù)詳解
- C語言編程動(dòng)態(tài)內(nèi)存分配常見錯(cuò)誤全面分析
- C語言內(nèi)存操作函數(shù)使用示例梳理講解
- C語言全部內(nèi)存操作函數(shù)的實(shí)現(xiàn)詳細(xì)講解
- C語言動(dòng)態(tài)內(nèi)存分配和內(nèi)存操作函數(shù)使用詳解
相關(guān)文章
C++編寫實(shí)現(xiàn)圖書管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++編寫實(shí)現(xiàn)圖書管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03實(shí)例解析C++設(shè)計(jì)模式編程中簡單工廠模式的采用
這篇文章主要介紹了C++設(shè)計(jì)模式編程中簡單工廠模式的采用實(shí)例,在簡單工廠模式中程序往往利用封裝繼承來降低耦合度,需要的朋友可以參考下2016-03-03利用C語言實(shí)現(xiàn)任務(wù)調(diào)度的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用純C語言實(shí)現(xiàn)任務(wù)調(diào)度(可用于STM32、C51等單片機(jī)),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2023-04-04C/C++?Qt?給ListWidget組件增加右鍵菜單功能
本篇文章給大家介紹ListWidget組件增加一個(gè)右鍵菜單,當(dāng)用戶在ListWidget組件中的任意一個(gè)子項(xiàng)下右鍵,我們讓其彈出這個(gè)菜單,并根據(jù)選擇提供不同的功能,感興趣的朋友跟隨小編一起看看吧2021-11-11