logo

memset() w C z przykładami

memset() służy do wypełnienia bloku pamięci określoną wartością.
Składnia funkcji memset() jest następująca:

 // ptr ==>Początkowy adres pamięci do wypełnienia // x ==> Wartość do wypełnienia // n ==> Liczba bajtów do wypełnienia począwszy od // od ptr do wypełnienia void *memset(void *ptr, int x, size_t n );>

Zauważ, że ptr jest wskaźnikiem void, dzięki czemu możemy przekazać do tej funkcji dowolny typ wskaźnika.



Zobaczmy prosty przykład w C, aby zademonstrować sposób użycia funkcji memset():








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

podmiot relacyjny

>

>

Wyjście:

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

Wyjaśnienie: (str + 13) wskazuje na pierwszą spację (indeks oparty na 0) ciągu GeeksForGeeks służy do programowania maniaków., a memset() ustawia znak „.” Zaczynając od pierwszego „” ciągu do 8 pozycji znakowych podanego string i stąd otrzymujemy wynik, jak pokazano powyżej.

zestaw j




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

>

>

Wyjście:

 0 0 0 0 0 0 0 0 0 0>


Ćwiczenia :

Przewiduj wynik poniższego programu.

nieważne 0




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

>

>

Zauważ, że powyższy kod nie ustawia wartości tablicy na 10, ponieważ memset działa znak po znaku, a liczba całkowita zawiera więcej niż jeden bajt (lub znaki).

synchronizacja wątków

Jeśli jednak zamienimy 10 na -1, otrzymamy wartości -1. Ponieważ reprezentacja -1 zawiera wszystkie jedynki zarówno w przypadku char, jak i int.

Odniesienie: strona podręcznika memset (linux)