logo

memset() v C s príkladmi

memset() sa používa na vyplnenie bloku pamäte konkrétnou hodnotou.
Syntax funkcie memset() je nasledovná:

 // ptr ==>Počiatočná adresa pamäte, ktorá sa má vyplniť // x ==> Hodnota na vyplnenie // n ==> Počet bajtov na vyplnenie počnúc // od ptr, ktorý sa má vyplniť void *memset(void *ptr, int x, size_t n );>

Všimnite si, že ptr je ukazovateľ void , takže tejto funkcii môžeme odovzdať akýkoľvek typ ukazovateľa.



Pozrime sa na jednoduchý príklad v C, ktorý demonštruje, ako sa používa funkcia 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;> }>

to je

>

>

Výkon:

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

Vysvetlenie: (str + 13) ukazuje na prvú medzeru (index založený na 0) reťazca GeeksForGeeks je určený pre programátorov. a memset() nastavuje znak '.' od prvého ' ' reťazca až na 8 pozícií daného znaku reťazec, a preto dostaneme výstup, ako je uvedené vyššie.

zreťazenie java reťazec




// 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ýkon:

 0 0 0 0 0 0 0 0 0 0>


Cvičenie:

Predpovedajte výstup nižšie uvedeného programu.

ak inak ak inak ak java




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

>

>

Upozorňujeme, že vyššie uvedený kód nenastavuje hodnoty poľa na 10, pretože memset funguje znak po znaku a celé číslo obsahuje viac ako jeden bajt (alebo znaky).

java čítanie csv

Ak však 10 nahradíme -1, dostaneme hodnoty -1. Pretože reprezentácia -1 obsahuje všetky 1 v prípade char aj int.

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