logo

memset() în C cu exemple

memset() este folosit pentru a umple un bloc de memorie cu o anumită valoare.
Sintaxa funcției memset() este următoarea:

 // ptr ==>Adresa de pornire a memoriei de umplut // x ==> Valoare de completat // n ==> Numărul de octeți de completat începând // de la ptr de completat void *memset(void *ptr, int x, size_t n );>>> 

Rețineți că ptr este un pointer void, astfel încât să putem trece orice tip de pointer acestei funcție.



Să vedem un exemplu simplu în C pentru a demonstra cum este utilizată funcția memset():

șir în metodele java








// 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;> }>

>

Ieșire:

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

Explicaţie: (str + 13) indică primul spațiu (index bazat pe 0) al șirului de caractere GeeksForGeeks este pentru programarea tocilor., iar memset() setează caracterul „.” începând de la primul „ ” din șir până la 8 poziții de caractere ale datei șir și, prin urmare, obținem rezultatul așa cum se arată mai sus.

sincronizarea firelor




// 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; }>

>

>

Ieșire:

 0 0 0 0 0 0 0 0 0 0>


Exercițiu :

Preziceți rezultatul programului de mai jos.

converti un șir în data




// 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; }>

metoda java

>

>

Rețineți că codul de mai sus nu setează valorile matricei la 10, deoarece memset funcționează caracter cu caracter și un număr întreg conține mai mult de un octet (sau caractere).

Totuși, dacă înlocuim 10 cu -1, obținem valori -1. Deoarece reprezentarea lui -1 conține toate cele 1 în cazul atât a caracterului cât și a int.

Referinţă: pagina de manual memset (linux)