C/C++ 中memset() 函數(shù)詳解及其作用介紹
memset 函數(shù)是內(nèi)存賦值函數(shù),用來給某一塊內(nèi)存空間進(jìn)行賦值的;
包含在<string.h>頭文件中,可以用它對一片內(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) ); //注意第一個參數(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);//這樣是不對的
一個int是4個字節(jié)的,8個int是32個字節(jié),所以首先要賦值的長度就不應(yīng)該為8而是32。
因為memset是逐字節(jié)拷貝,以num為首地址的8字節(jié)空間都被賦值為1,
即一個int變?yōu)?X00000001 00000001 00000001 00000001,顯然,把這個數(shù)化為十進(jìn)制不會等于1的。


所以,在memset使用時要千萬小心,在給char以外的數(shù)組賦值時,只能初始化為0或者-1。
(如果用memset(a,1,20);
就是對a指向的內(nèi)存的20個字節(jié)進(jìn)行賦值,每個都用ASCII為1的字符去填充,轉(zhuǎn)為二進(jìn)制后,1就是00000001,占一個字節(jié)。一個INT元素是4字節(jié),合一起就是1000000010000000100000001,就等于16843009,就完成了對一個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)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C語言strlen和sizeof在數(shù)組中的使用詳解
對于 strlen 和 sizeof,相信不少程序員會混淆其功能。雖然從表面上看它們都可以求字符串的長度,但二者卻存在著許多不同之處及本質(zhì)區(qū)別2021-10-10
c語言中malloc、realloc與calloc 的區(qū)別以及聯(lián)系
以下是對c語言中的malloc函數(shù),realloc函數(shù)與calloc函數(shù)的區(qū)別以及它們之間的聯(lián)系進(jìn)行了介紹,需要的朋友可以過來參考下2013-08-08
關(guān)于VS2022不能使用<bits/stdc++.h>的解決方案(萬能頭文件)
#include<bits/stdc++.h>包含了目前 C++ 所包含的所有頭文件,又稱萬能頭文件,那么如何在VS2022中使用萬能頭呢?下面小編給大家代理了關(guān)于VS2022不能使用<bits/stdc++.h>的解決方案(萬能頭文件),感興趣的朋友一起看看吧2022-03-03

