logo

memset() v C s příklady

memset() se používá k vyplnění bloku paměti konkrétní hodnotou.
Syntaxe funkce memset() je následující:

 // ptr ==>Počáteční adresa paměti k vyplnění // x ==> Hodnota k vyplnění // n ==> Počet bajtů k vyplnění počínaje // od ptr k vyplnění void *memset(void *ptr, int x, size_t n );>

Všimněte si, že ptr je void ukazatel , takže této funkci můžeme předat jakýkoli typ ukazatele.



Podívejme se na jednoduchý příklad v C, který demonstruje, jak se používá funkce 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;> }>

>

strojopis každý
>

Výstup:

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

Vysvětlení: (str + 13) ukazuje na první mezeru (index založený na 0) řetězce GeeksForGeeks je určen pro programovací geeky řetězec, a proto dostaneme výstup, jak je uvedeno výše.




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

>

>

Výstup:

 0 0 0 0 0 0 0 0 0 0>


Cvičení:

Předpovězte výstup níže uvedeného programu.




diskrétní negace matematiky
// 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; }>

>

>

Všimněte si, že výše uvedený kód nenastavuje hodnoty pole na 10, protože memset funguje znak po znaku a celé číslo obsahuje více než jeden bajt (nebo znaky).

Pokud však nahradíme 10 hodnotou -1, dostaneme hodnoty -1. Protože reprezentace -1 obsahuje všechny jedničky v případě char i int.

Odkaz: manuálová stránka memsetu (linux)