『壹』 c語言malloc和memset

你把代碼文本貼出來我來測試下

『貳』 C語言的memset函數

該說的二樓已經說很清楚了,我補充一點,就是這個函數常用來在malloc後,將這段內存空間清空(如置0),以防在使用時(尤其是字元串)讀出內存的隨機值。

『叄』 c語言里有memset()怎麼用需要什麼頭文件

包含在 <string.h>頭文件中

memset為內存填充函數,可以用它對一片內存空間進行初始化, 它可以一位元組一位元組地把整個數組設置為一個指定的值
其原型為
void *memset(void *s, int v, size_t n);
這里s可以是數組名,也可以是指向某一內在空間的指針;
v為要填充的值;
n為要填充的位元組數,通常為sizeof(s);
使用memset時要注意的是,memset是逐位元組進行填充,所以s一般為char *型。

『肆』 求C語言memset的具體用法,什麼時候必須用,什麼時候可以不用以及可以用什麼替換memset

memset函數使用詳解
今天做題卡在MEMSET函數的使用上了,本來以為int a[100]; memset(a, MAX,sizeof(a));就是將a數組全部賦值為MAX,現在才知道他的填充是以位元組為單位,一般用於對字元型變數的初值進行賦值.
更詳細的解說見網路 --> http://ke..com/view/982208.htm
1。void *memset(void *s,int c,size_t n)
總的作用:將已開辟內存空間 s 的首 n 個位元組的值設為值 c。
2。例子
#include
void main(){
char *s="Golden Global View";
clrscr();
memset(s,'G',6);
printf("%s",s);
getchar();
return 0;
}
3。memset() 函數常用於內存空間初始化。如:
char str[100];
memset(str,0,100);
4。memset()的深刻內涵:用來對一段內存空間全部設置為某個字元,一般用在對定義的字元串進行初始化為『 』或『/0』;例:char a[100];memset(a, '/0', sizeof(a));
memcpy用來做內存拷貝,你可以拿它拷貝任何數據類型的對象,可以指定拷貝的數據長度;例:char a[100],b[50]; memcpy(b, a, sizeof(b));注意如用sizeof(a),會造成b的內存地址溢出。
strcpy就只能拷貝字元串了,它遇到'/0'就結束拷貝;例:char a[100],b[50];strcpy(a,b);如用strcpy(b,a),要注意a中的字元串長度(第一個『/0』之前)是否超過50位,如超過,則會造成b的內存地址溢出。
5.補充:一點心得
memset可以方便的清空一個結構類型的變數或數組。
如:
struct sample_struct
{
char csName[16];
int iSeq;
int iType;
};
對於變數
struct sample_strcut stTest;
一般情況下,清空stTest的方法:
stTest.csName[0]='/0';
stTest.iSeq=0;
stTest.iType=0;
用memset就非常方便:
memset(&stTest,0,sizeof(struct sample_struct));
如果是數組:
struct sample_struct TEST[10];

memset(TEST,0,sizeof(struct sample_struct)*10);
6。strcpy
原型:extern char *strcpy(char *dest,char *src);
用法:#i nclude
功能:把src所指由NULL結束的字元串復制到dest所指的數組中。
說明:src和dest所指內存區域不可以重疊且dest必須有足夠的空間來容納src的字元串。
返回指向dest的指針。
memcpy
原型:extern void *memcpy(void *dest, void *src, unsigned int count);
用法:#i nclude
功能:由src所指內存區域復制count個位元組到dest所指內存區域。
說明:src和dest所指內存區域不能重疊,函數返回指向dest的指針。
memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#i nclude
功能:把buffer所指內存區域的前count個位元組設置成字元c。
說明:返回指向buffer的指針。

『伍』 C語言 memset函數

#include<stdio.h>
#include<string.h>
void pr( char * );
int main()
{
char xx[11],*a,yy[21],*b;

// 數組初始化,用字元串結束符:'\0'
memset(xx,'\0',sizeof(xx));
a=(char *)memset(xx,'1',sizeof(xx)-1);
pr(a);

memset(yy,'\0',sizeof(yy));
b=(char *)memset(yy,'a',sizeof(yy)-1);
pr(b);

return 0;
}
void pr( char *ss )
{
int i;
for(i=0;i<strlen(ss);i++)
{
printf("%c ",ss[i]);
}
putchar('\n');
}

『陸』 c語言中memset是什麼意思

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。

『柒』 c語言中memset函數的作用

memset(addr, val, size);

把addr地址開始的內存,大小為size位元組的值,賦值為val


相當於

unsignedchar*t=(unsignedchar*)addr;
inti;
for(i=0;i<size;i++)
t[i]=val;

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

『捌』 C語言memset問題

首先你memset不能用來初始化int類型的內存,也不是不能,是你那麼做了它也不會去按照你想的去初始化,除非你初始化值是0。原因是memset是按位元組進行初始化的,舉例,memset(pStart, 2, sizeof(int)); 一般sizeof(int)值是4,那麼這個memset會將pStart開始的4個內存單元(4位元組),每個位元組都初始化成2。這樣初始化之後,如果你要的是這個int類型的數值,那這個int值就是0x2020202,是這個值。這個和你做的那個初始化是類似的。
然後就是你使用memset的時候使用的是sizeof(data),因為data是一個指針,那麼他的長度32位下永遠都是4,所以你只初始化了4個位元組,也就是只初始化了申請的第一個int單元,後面的兩個都沒有進行初始化。所以第一個int單元的值是0x2020202,也就是十進制的33686018,即你輸出的第一個數,而後面的兩個由於沒有初始化都是以前的值,是隨機的不可預測的。
個人覺得memset用來初始化的話一般都是用來將內存單元清0,想要初始化成一個具體的數值的話,除非你初始化的單元都是位元組的,那樣是可行的,其他的都很不方便。

『玖』 c語言函數中的memset()是怎麼用的

j=0;是一句初始化語句,在int
j;聲明變數後變數的值是未知的,所以要在使用前賦初值。
memset(word,0,21);這個函數第一參數是一個指針,指向目標內存的首地址,第二個參數是你要賦給指定內存塊中各個位元組的值。第三個參數是被操作內存塊的位元組數。連在一起這個語句的意思是,從word指向的內存地址開始的21個位元組的內存,賦成0。其實也是一個初始化操作。

『拾』 在C語言中函數memset()是干什麼用的

顧名思義~~memset=memory set~~~設置內存的~~~具體的用法查一下MSDN就知道了~~