C/C++ 中memset() 函數(shù)詳解及其作用介紹
memset 函數(shù)是內(nèi)存賦值函數(shù),用來給某一塊內(nèi)存空間進(jìn)行賦值的;
包含在<string.h>頭文件中,可以用它對(duì)一片內(nèi)存空間逐字節(jié)進(jìn)行初始化;
原型為 :
void *memset(void *s, int v, size_t n);
這里s可以是數(shù)組名,也可以是指向某一內(nèi)在空間的指針;
v為要填充的值;
n為要填充的字節(jié)數(shù);
例子:
struct data { char num[100]; char name[100]; int n; }; struct data a, b[10]; memset( &a, 0, sizeof(a) ); //注意第一個(gè)參數(shù)是指針類型,a不是指針變量,要加& memset( b, 0, sizeof(b) ); //b是數(shù)組名,就是指針類型,不需要加&
例2:
char str[9];
我們用memset給str初始化為“00000000”,用法如下
memset(str,0,8);
注意,memset是逐字節(jié)拷貝的。
例3:
int num[8];
我們用memset給str初始化為{1,1,1,1,1,1,1,1},
memset(num,1,8);//這樣是不對(duì)的
一個(gè)int是4個(gè)字節(jié)的,8個(gè)int是32個(gè)字節(jié),所以首先要賦值的長(zhǎng)度就不應(yīng)該為8而是32。
因?yàn)閙emset是逐字節(jié)拷貝,以num為首地址的8字節(jié)空間都被賦值為1,
即一個(gè)int變?yōu)?X00000001 00000001 00000001 00000001,顯然,把這個(gè)數(shù)化為十進(jìn)制不會(huì)等于1的。
所以,在memset使用時(shí)要千萬小心,在給char以外的數(shù)組賦值時(shí),只能初始化為0或者-1。
(如果用memset(a,1,20);
就是對(duì)a指向的內(nèi)存的20個(gè)字節(jié)進(jìn)行賦值,每個(gè)都用ASCII為1的字符去填充,轉(zhuǎn)為二進(jìn)制后,1就是00000001,占一個(gè)字節(jié)。一個(gè)INT元素是4字節(jié),合一起就是1000000010000000100000001,就等于16843009,就完成了對(duì)一個(gè)INT元素的賦值了。)
#include <memory.h> //我試了一下,C語言這么用,C++還可以用<cstring> #include <stdio.h> void main( void ) { char buffer[] = "This is a test of the memset function"; printf( "Before: %s\n", buffer ); memset( buffer, '*', 4 ); printf( "After: %s\n", buffer ); }
輸出:
Before: This is a test of the memset function
After: **** is a test of the memset function
到此這篇關(guān)于C/C++ 中memset() 函數(shù)詳解及其作用介紹的文章就介紹到這了,更多相關(guān)C++ memset() 函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
json error: Use of overloaded operator [] is ambiguous錯(cuò)誤的解決方
今天小編就為大家分享一篇關(guān)于json error: Use of overloaded operator [] is ambiguous錯(cuò)誤的解決方法,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧2019-04-04基于一個(gè)簡(jiǎn)單定長(zhǎng)內(nèi)存池的實(shí)現(xiàn)方法詳解
本篇文章對(duì)一個(gè)簡(jiǎn)單定長(zhǎng)內(nèi)存池的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹。需要的朋友參考下2013-05-05OpenCV實(shí)現(xiàn)視頻綠幕背景替換功能的示例代碼
這篇文章主要介紹了如何利用OpenCV實(shí)現(xiàn)視頻綠幕背景替換功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)OpenCV有一定的幫助,感興趣的可以學(xué)習(xí)一下2023-02-02vscode 安裝go第三方擴(kuò)展包填坑記錄的詳細(xì)教程
這篇文章主要介紹了vscode 安裝go第三方擴(kuò)展包填坑記錄,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05全面解析C++中的new,operator new與placement new
以下是C++中的new,operator new與placement new進(jìn)行了詳細(xì)的說明介紹,需要的朋友可以過來參考下2013-09-09C++ 中const對(duì)象與const成員函數(shù)的實(shí)例詳解
這篇文章主要介紹了C++ 中const對(duì)象與const成員函數(shù)的實(shí)例詳解的相關(guān)資料,希望通過本文能讓大家徹底掌握該如何使用,需要的朋友可以參考下2017-08-08