C-Programmierung

Verwendung der Memset-Funktion

Verwendung der Memset-Funktion

In C wird die Funktion memset() verwendet, um einen Ein-Byte-Wert byteweise auf einen Speicherblock zu setzen. Diese Funktion ist nützlich, um einen Speicherblock byteweise mit einem bestimmten Wert zu initialisieren. In diesem Artikel werden wir im Detail sehen, wie diese Funktion verwendet werden kann. Also lasst uns anfangen.

Header-Datei:

1
Schnur.ha

Syntax:

1
void *memset(void *str, int ch, size_t n)

Diese Funktion setzt den ersten nein Bytes des Speicherblocks, auf den zeigt str durch CH.

Argumente:

Die Funktion benötigt 3 Argumente:

  1. str: Dies ist der Zeiger des Speicherplatzes, an dem der Speicher eingestellt wird. Dies ist ein void-Zeiger, also können wir jede Art von Speicherblock setzen, aber der Speicher wird Byte für Byte gesetzt.
  2. CH: Dies ist der Wert, der in den Speicherblock kopiert werden soll. Dies ist ein ganzzahliger Wert, der jedoch vor dem Kopieren in ein Zeichen ohne Vorzeichen umgewandelt wird.
  3. nein: Dies ist die Anzahl der Bytes im Speicherblock, die gesetzt wird.

Rückgabewerte:

memset() gibt die erste Adresse des Speicherblocks zurück, von der aus der Wert gesetzt wird.

Beispiele:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fünfzehn
16
//Beispiel 1.c
#einschließen
#einschließen
int main()

char str[30] = "ABCD EFGH";
printf("Vor memset => %s",str);
memset(str,'x',3);
printf("\nNach memset => %s\n",str);
0 zurückgeben;


In Beispiel1.c, wir haben ein Zeichenarray der Größe 30 . deklariert. Dann haben wir es mit dem String „ABCD EFGH . initialisiert.” In der Memset-Funktion haben wir 3 Argumente str, 'x' und 3 . übergeben. Der Speicherblock, auf den str zeigt, wird also die ersten 3 Zeichen um 'x . zurückgesetzt.' Nach memset, wenn wir den Speicher drucken, erhalten wir "xxxD EFGH".”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fünfzehn
16
//Beispiel2.c
#einschließen
#einschließen
int main()

char str[30] = "ABCD EFGH";
printf("Vor memset => %s",str);
memset(str+4,'x',3);
printf("\nNach memset => %s\n",str);
0 zurückgeben;


In Beispiel2.c, wir haben str+4 an die Memset-Funktion übergeben. Also setzt es den Speicher nach der 4. Stelle von str . zurück.  Nach memset, wenn wir den Speicher drucken, erhalten wir "ABCDxxxGH".”

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fünfzehn
16
17
18
// Beispiel3.c
#einschließen
#einschließen
int main()

int arr[5],i;
memset(arr,10,5*sizeof(arr[0]));
printf("\narr Elemente => \n");
für(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
0 zurückgeben;


In Beispiel3.c haben wir ein Integer-Array der Größe 5 deklariert und versuchen, es mit 10 . zu initialisieren. Aber aus der Ausgabe haben wir gesehen, dass das Array nicht mit 10 initialisiert ist; stattdessen haben wir den Wert „168430090“. Dies liegt daran, dass der ganzzahlige Wert größer als ein Byte ist und die Memset-Funktion den Wert vor dem Kopieren in ein vorzeichenloses Zeichen umwandelt. Jetzt werden wir sehen, wie wir den Wert "168430090" erhalten.


Die binäre Darstellung von 10 ist 00000000 00000000 00000000 0000010.

Wenn Integer in unsigned char umgewandelt werden, wird das untere 1 Byte berücksichtigt. Wenn also 10 in unsigned char umgewandelt wird, ist es eine binäre Darstellung 000001010.

Die Funktion memset() setzt den Speicherplatz byteweise by. Insgesamt 4 Byte sind also: 00001010 00001010 00001010 00001010.

Der Dezimalwert der binären Darstellung von 4 Byte ist 168430090.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fünfzehn
16
17
18
// Beispiel4.c
#einschließen
#einschließen
int main()

int arr[5],i;
memset(arr,0,5*sizeof(arr[0]));
printf("\narr Elemente => \n");
für(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
0 zurückgeben;


In Beispiel4.c, wir haben das Integer-Array mit 0 initial initialisiert. Alle Bits der binären Darstellung von 0 sind 0. Das Array wird also mit 0 . initialisiert.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
fünfzehn
16
17
18
19
// Beispiel5.c
#einschließen
#einschließen
int main()

int arr[5],i;
memset(arr,-1,5*sizeof(arr[0]));
printf("\narr Elemente => \n");
für(i=0;i<5;i++)
printf("%d\t",arr[i]);
printf("\n");
0 zurückgeben;


In Beispiel5.c, wir haben das Integer-Array mit 0 initial initialisiert. Alle Bits der binären Darstellung von -1 sind 1. Das Array wird also mit -1 . initialisiert.

Fazit:

In diesem Artikel haben wir mit der Memset-Funktion gesehen, wie wir den Wert eines Speicherblocks effizient initialisieren oder setzen können. Wir können ein beliebiges Zeichen und 0 oder -1 als ganzzahligen Wert für einen Speicherblock festlegen set. Die Memset-Funktion ist schneller, um einen großen Teil zusammenhängenden Speichers festzulegen, als wenn Sie den Speicherort einfach mit einer Schleife festlegen setting.

Nützliche Tools für Linux-Spieler
Wenn Sie gerne unter Linux spielen, haben Sie wahrscheinlich Apps und Dienstprogramme wie Wine, Lutris und OBS Studio verwendet, um das Spielerlebnis ...
HD-Remastered-Spiele für Linux, die noch nie zuvor eine Linux-Version hatten
Viele Spieleentwickler und -herausgeber entwickeln HD-Remaster alter Spiele, um die Lebensdauer des Franchise zu verlängern. Bitte Fans, die Kompatibi...
So verwenden Sie AutoKey zur Automatisierung von Linux-Spielen
AutoKey ist ein Desktop-Automatisierungsdienstprogramm für Linux und X11, programmiert in Python 3, GTK und Qt. Mithilfe der Skript- und MACRO-Funktio...