溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C/C++中memset()函數的詳細介紹

發布時間:2020-07-21 17:28:25 來源:億速云 閱讀:407 作者:小豬 欄目:開發技術

這篇文章主要講解了C/C++中memset()函數的詳細介紹,內容清晰明了,對此有興趣的小伙伴可以學習一下,相信大家閱讀完之后會有幫助。

memset 函數是內存賦值函數,用來給某一塊內存空間進行賦值的;

包含在<string.h>頭文件中,可以用它對一片內存空間逐字節進行初始化;

原型為 :

void *memset(void *s, int v, size_t n);

這里s可以是數組名,也可以是指向某一內在空間的指針;

v為要填充的值;

n為要填充的字節數;

例子:

struct data
{
char num[100];
char name[100];
int n;
};
struct data a, b[10];
 
memset( &a, 0, sizeof(a) ); //注意第一個參數是指針類型,a不是指針變量,要加&
memset( b, 0, sizeof(b) ); //b是數組名,就是指針類型,不需要加&

例2:

char str[9];

我們用memset給str初始化為“00000000”,用法如下

memset(str,0,8);

注意,memset是逐字節拷貝的。

例3:

int num[8];

我們用memset給str初始化為{1,1,1,1,1,1,1,1},

memset(num,1,8);//這樣是不對的

一個int是4個字節的,8個int是32個字節,所以首先要賦值的長度就不應該為8而是32。

因為memset是逐字節拷貝,以num為首地址的8字節空間都被賦值為1,

即一個int變為0X00000001 00000001 00000001 00000001,顯然,把這個數化為十進制不會等于1的。

C/C++中memset()函數的詳細介紹

C/C++中memset()函數的詳細介紹

所以,在memset使用時要千萬小心,在給char以外的數組賦值時,只能初始化為0或者-1。

(如果用memset(a,1,20);
就是對a指向的內存的20個字節進行賦值,每個都用ASCII為1的字符去填充,轉為二進制后,1就是00000001,占一個字節。一個INT元素是4字節,合一起就是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 

看完上述內容,是不是對C/C++中memset()函數的詳細介紹有進一步的了解,如果還想學習更多內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女