memset() i C med eksempler

memset() bruges til at fylde en hukommelsesblok med en bestemt værdi.
Syntaksen for memset()-funktionen er som følger:

 // ptr ==>Startadresse for hukommelse, der skal udfyldes // x ==> Værdi, der skal udfyldes // n ==> Antal bytes, der skal udfyldes, starter // fra ptr, der skal udfyldes void *memset(void *ptr, int x, size_t n ); 

Bemærk, at ptr er en void pointer, så vi kan sende enhver form for pointer til denne funktion.

Lad os se et simpelt eksempel i C for at demonstrere, hvordan memset()-funktionen bruges:




// C program to demonstrate working of memset()> #include> #include> > int> main()> {> > char> str[50] => 'GeeksForGeeks is for programming geeks.'> ;> > printf> (> ' Before memset(): %s '> , str);> > > // Fill 8 characters starting from str[13] with '.'> > memset> (str + 13,> '.'> , 8*> sizeof> (> char> ));> > > printf> (> 'After memset(): %s'> , str);> > return> 0;> }>

Produktion:

 Before memset(): GeeksForGeeks is for programming geeks. After memset(): GeeksForGeeks........programming geeks. 

Forklaring: (str + 13) peger på det første mellemrum (0 baseret indeks) i strengen GeeksForGeeks er til programmering af nørder., og memset() sætter tegnet '.' startende fra første ' ' i strengen op til 8 tegnpositioner af den givne streng og derfor får vi output som vist ovenfor.




// C program to demonstrate working of memset()> #include> #include> > void> printArray(> int> arr[],> int> n)> {> > for> (> int> i=0; i printf('%d ', arr[i]); } int main() { int n = 10; int arr[n]; // Fill whole array with 0. memset(arr, 0, n*sizeof(arr[0])); printf('Array after memset() '); printArray(arr, n); return 0; }>

Produktion:

 0 0 0 0 0 0 0 0 0 0 


Dyrke motion :

Forudsige outputtet af nedenstående program.




// C program to demonstrate working of memset()> #include> #include> > void> printArray(> int> arr[],> int> n)> {> > for> (> int> i=0; i printf('%d ', arr[i]); } int main() { int n = 10; int arr[n]; // Fill whole array with 100. memset(arr, 10, n*sizeof(arr[0])); printf('Array after memset() '); printArray(arr, n); return 0; }>

Bemærk, at ovenstående kode ikke indstiller matrixværdier til 10, da memset fungerer tegn for tegn, og et heltal indeholder mere end én byte (eller tegn).

Men hvis vi erstatter 10 med -1, får vi -1 værdier. Fordi repræsentation af -1 indeholder alle 1'ere i tilfælde af både char og int.

Reference: memset man page (linux)