c語言memset函數
⑴ 在c語言中函數memset()是干什麼用的
memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#include <string.h>
功能:把buffer所指內存區域的前count個位元組設置成字元c。
說明:返回指向buffer的指針。
舉例:
// memset.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
clrscr();
memset(s,'G',6);
printf("%s",s);
getchar();
return 0;
}
相關函數:bzero,setmem,strset
⑵ C語言中,memset函數都可以給什麼類型的數組清零
函數原型:void *memset(void *s, int c, size_t n);
函數解釋:將s中前n個位元組替換為ch並返回s;
memset:作用是在一段內存塊中填充某個給定的值,它是對較大的結構體或數組進行清零操作的一種最快方法。
⑶ C語言的memset函數
memset
原型:extern void *memset(void *buffer, int c, int count);
用法:#include <string.h>
功能:把buffer所指內存區域的前count個位元組設置成字元c。
說明:返回指向buffer的指針。
舉例:
// memset.c
#include <syslib.h>
#include <string.h>
main()
{
char *s="Golden Global View";
clrscr();
memset(s,'G',6);
printf("%s",s);
getchar();
return 0;
}
相關函數:bzero,setmem,strset
⑷ 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函數
#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()是怎麼用的
j=0;是一句初始化語句,在int
j;聲明變數後變數的值是未知的,所以要在使用前賦初值。
memset(word,0,21);這個函數第一參數是一個指針,指向目標內存的首地址,第二個參數是你要賦給指定內存塊中各個位元組的值。第三個參數是被操作內存塊的位元組數。連在一起這個語句的意思是,從word指向的內存地址開始的21個位元組的內存,賦成0。其實也是一個初始化操作。
⑻ C語言編程有關memset函數
在你調用memset()函數時,第三個參數大小不對,應該是memset(b,0,40)。
實際上一個整型的變數在32位機的內存中佔用4個位元組
的大小。如:你可以定義一個整型變數a然後用:
printf("%d",sizeof(a));看到它在內存中佔用的位元組數。
當然建議在調用memset()函數時用sizeof()函數來自動
取它的大小,如你的例子中可以用:
memset(b,0,sizeof(b));
⑼ C語言問題, memset()函數
P3指向開辟的20個位元組的空間的首地址
而P2初始值等於P3,然後不斷++,指針一直向後移動
如果不加P2,而直接用P3 ++,printf("%s\n",p3);這句的P3就錯了,因為P3已經不是首地址了
至於你說的40以前先輸出name再報錯,40以後直接報錯,那是因為:
後面的20個位元組剛好是尚未分配的內存,你對尚未分配的內存進行置0操作,雖然錯誤,但不會造成嚴重後果,所以先輸出name再報錯
超過20個位元組以後,剛好是已分配的內存,存有數據,你要進行置0操作,系統當然不允許了,直接出錯。
你說的40 41 是不確定的,在不同時候,值可能不同。
但是因為系統的內存4個位元組對齊的緣故,
必然是4n 4n+1 n為整數 如36 32 28先輸出name再報錯
37 33 29直接報錯
補充一點:你如果把free這句注釋掉就不會報錯,但是每運行一次就有一塊內存被佔用而沒被使用
⑽ C語言中memset函數是在哪個頭文件中
string.h 和 memory.h中都有
這些頭文件都是標准庫中的