memset起什麼作用,c語言中函式memset 是什麼意思?什麼功能

2022-02-23 18:22:12 字數 4758 閱讀 8167

1樓:匿名使用者

樓上兩位大俠回答的都很好。

個人覺得,memset一般是用於初始化(清空)一個記憶體塊,以防你新建一個變數等時系統分配給你一段含有用過的記憶體塊。如果某君不小心不另外對其初始化就呼叫的話,可能會產生不可預料的錯誤。

2樓:匿名使用者

碰到問題多到網上搜一下

memset

功 能: 將s所指向的某一塊記憶體中的每個位元組的內容全部設定為ch指定的ascii值,

塊的大小由第三個引數指定,這個函式通常為新申請的記憶體做初始化工作用 法: void *memset(void *s, char ch, unsigned n);

程式例:

#include

#include

#include

int main(void)

輸出結果:

buffer before memset: hello worldbuffer after memset: ***********

3樓:風夜藍

memset是用第二個引數的值去填充第一個引數指向的記憶體塊,填充長度即為第三個引數.

而memcpy是把第二個引數的地址所指向的記憶體拷貝到第一個引數所指向的記憶體地址中,

長度也是第三個引數.

根據兩個函式的涵義你可以知道

memcpy使用與memset完全可以獨立.

兩者並沒有依賴關係.

c語言中函式memset()是什麼意思?什麼功能

4樓:匿名使用者

memset()的函式, 它可以一位元組一位元組地把整個陣列設定為一個指定的值。 memset()函式在mem.h標頭檔案中宣告,它把陣列的起始地址作為其第一個引數,第二個引數是設定陣列每個位元組的值,第三個引數是陣列的長度(位元組數,不是元素個數)。

其函式原型為:

void *memset(void*,int,unsigned);

其中void*表示地址

memset()的第一個實參是陣列名,陣列名作引數即陣列作引數,它僅僅只是一個陣列的起始地址而已。

實現第一個memset()函式呼叫的記憶體佈局見圖7-3。 在函式memset()棧區,從返回地址往上依次為第1,2,3個引數。第1個引數中的內容是main()函式中定義的陣列ia1的起始地址。

第2個引數是給陣列設定的值(0),第3個引數是陣列的長度(50*2)。函式返回時,main()函式的陣列中內容全置為0。

5樓:匿名使用者

memset(地址指標, 值, 大小)將地址指向的區域連續大小的記憶體區域填充為值

6樓:

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

函式解釋:將 s 中前 n 個位元組用 ch 替換並返回 s 。

memset:作用是在一段記憶體塊中填充某個給定的值,它是對較大的結構體或陣列進行清零操作的一種最快方法.

請參考:

c語言中memset函式的作用

7樓:風若遠去何人留

memset(addr, val, size);

把addr地址開始的記憶體,大小為size位元組的值,賦值為val相當於

unsigned char * t = (unsigned char *)addr;

int i;

for(i = 0; i < size; i ++)t[i] = val;

效果一樣,不過一般memset不會這麼實現,而是採用更高效的方法

c++這個memset()函式有什麼用? memset(什麼意思,什麼意思,什麼意思);

8樓:

為已知大小的一片記憶體空間存入同一個值。

9樓:

memset(陣列名,用這個值初始化,陣列的大小);

socket程式設計中的memset函式的作用是什麼

10樓:匿名使用者

原型是extern void *memset(void *buffer, int c, int count)

buffer為指標或是陣列,c是賦給buffer的值,count是buffer的長度.

這個函式在socket中多用於清空陣列.

如:原型是memset(buffer, 0, sizeof(buffer))

什麼是用memset的優勢()c語言

11樓:風若遠去何人留

1 **量少

2 效率高

這兩個 是memset比迴圈賦值更有優勢的地方。

請教memset()函式的作用

12樓:匿名使用者

所謂「初始化」,當然是指將你定義的變數或申請的空間賦予你所期望的值,例如語句int i=0;就表明定義了一個變數i,並初始化為0;如果int j=5;就表明定義了一個變數j,並初始化為5。

但是對於大塊兒記憶體的分配,這種方法當然不行,例如int arr[100];定義了陣列arr,包含100個元素,如果你寫成int arr[100]=0;想將陣列全部內容初始化為0,是不行的,連編譯都不能通過。這種情況的初始化,有兩種方法,一種是一個一個的初始化,如for(int i=0;i<100;i++)arr[i]=0;就完成了陣列的初始化。另一種方法,就是使用memset:

一個語句就夠了--memset(arr,0,sizeof(int)*100);

各引數解釋如下:arr是陣列的首地址,0就是要講這些地址的內容賦值為0,sizeof(int)求出int型別的長度,乘以100就表示arr陣列的整個長度。

當然,如果用malloc分配的記憶體,一般只能使用memset來初始化了,用第一種初始化方法明顯不合適。

13樓:甄磊段幹靖柏

memset(addr,

val,

size);

把addr地址開始的記憶體,大小為size位元組的值,賦值為val相當於

unsigned char * t = (unsigned char *)addr;

int i;

for(i = 0; i < size; i ++)t[i] = val;效果一樣,不過一般memset不會這麼實現,而是採用更高效的方法

14樓:

char ch[10]

比如memset(ch,0,8),就是把陣列ch前八項置為零,後面的不一定為零。比如剛開始ch[1]='z',ch[8]='a',ch[9]='b',經過memset後,ch[1]為零了,而ch[8],ch[9]都不變

15樓:皇家救星

你剛分配的記憶體空間,或者是被你用過的記憶體空間裡面的資料是不固定的為了避免這些無用的資料給自己的程式帶來影響,可以用memset把這些記憶體裡面的資料置成某個數值

一般情況下是置0

當然,如果你的程式不會受這些無用資料影響,就不用做這個工作了

16樓:匿名使用者

你申請一個一百大小的陣列a[100],想要全部初始化成一個值,就可以用這個函式

/* memset.c: this program uses memset to

* set the first four bytes of buffer to "*".

*/#include

#include

void main( void )

輸出:before: this is a test of the memset function

after: **** is a test of the memset function

17樓:中國瑞誠

memset-> member set 就是給一個buffer的成員設定初值。

c++程式中memset什麼意思呀

18樓:匿名使用者

#include

void *memset( void *buffer, int ch, size_t count );

功能: 函式拷貝ch 到buffer 從頭開始的count 個字元裡, 並返回buffer指標。 memset() 可以應用在將一段記憶體初始化為某個值。

例如:memset( the_array, '\0', sizeof(the_array) );

這是將一個陣列的所以分量設定成零的很便捷的方法。

19樓:

庫函式memset()是針對位元組操作的,其中第二個引數值被賦給第一個引數指向的記憶體地址開始的每一個位元組,因此,這種初始化其實存在侷限性,也導致其主要用於清除陣列內容等。比如:假設i=0,1,2,...

memset(a,0,sizeof(a)); // 此時a[i]=0x00000000

memset(a,-1,sizeof(a)); // 此時a[i]=0xffffffff

memset(a,0x0f,sizeof(a)); // 此時a[i]=0x0f0f0f0f=252645135

由於500=0x1f4,400=0x190,因此,如果使用

memset(a,0x190,sizeof(a)); // 此時a[i]=0x90909090

所以,初始化過程還是建議使用迴圈語句來做。

c語言中作用C語言中作用

取決於在scanf中使用還是在printf中使用。在scanf中使用,則新增了 的部分會被忽略,不會被引數獲取。例如輸入為 12 abc那麼12將會讀取到變數a中,但是後面的abc將在讀取之後拋棄,不賦予任何變數 例如這裡的字元陣列b 在printf中使用,表示用後面的形參替代的位置,實現動態格式輸...

C語言中的清屏有什麼作用那,C語言中清屏函式是什麼?

c語言中的清屏的作用為 清除螢幕輸出。呼叫清屏時,螢幕上的所有輸出都將被清除,這相當於為軟體重新提供了畫布以自由輸出。螢幕清除通常用於以下情況 1 當最後一個功能的執行完成時,輸出不再重要,並且需要顯示新的內容或選單。2 對於加密,例如某些記憶遊戲,在顯示幾秒鐘後,清除所有輸出。3 要顯示大部分關鍵...

c語言中的取地址符的作用,c語言中的取地址是在什麼時候要用,為什麼要用

b是定義一個變數 而a是引用一個變數。它們之間沒有比較的必要,可能是你理解上有偏差。a和b完全沒有關係,int b 是定義一個變數,且沒有給其初始化,scanf是標準庫提供的輸入函式,函式格式是scanf char format,void p format 是輸入數 回據格式控制字串,void p,...