memset() används för att fylla ett minnesblock med ett visst värde.
Syntaxen för memset()-funktionen är som följer:
// ptr ==>Startadress för minne som ska fyllas // x ==> Värde som ska fyllas // n ==> Antal byte som ska fyllas med start // från ptr som ska fyllas void *memset(void *ptr, int x, size_t n );>
Observera att ptr är en void-pekare, så att vi kan skicka vilken typ av pekare som helst till denna funktion.
Låt oss se ett enkelt exempel i C för att visa hur memset()-funktionen används:
huggorm full huggorm
// 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.>
Förklaring: (str + 13) pekar på första blanksteg (0 baserat index) i strängen GeeksForGeeks är för programmeringsnördar., och memset() ställer in tecknet '.' med början från första ' ' i strängen upp till 8 teckenpositioner av den givna sträng och därför får vi utdata som visas ovan.
// 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; }> |
singeldesign
>
>
Produktion:
0 0 0 0 0 0 0 0 0 0>
Träning :
Förutsäg resultatet av programmet nedan.
// 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; }> |
>
>
Observera att ovanstående kod inte ställer in matrisvärden till 10 eftersom memset fungerar tecken för tecken och ett heltal innehåller mer än en byte (eller tecken).
Men om vi ersätter 10 med -1 får vi -1-värden. Eftersom representation av -1 innehåller alla 1:or i fallet med både char och int.
Referens: memset man page (linux)