memset()
-
Guten Tag,
ich habe eine Frage zu memset-Funktion.
Ich int-array aus 100 elementen mit 0 Überschrieben.
Dann wollte ich die ersten 10 mit 1 überschreiben, doch das geht leider nicht.
Warum?
Die memset erwarten als ersten Parameter, die Anfangsadresse von buf.
Das ist doch richtig, oder?Vielen Dank im Voraus.
#include <stdio.h> #include <string.h> int main (void) { int buf[100]; memset(&buf[0], 0, 100*sizeof(int)); memset(buf, 1, 10*sizeof(int)); int i; for (i=0 ; i<100; i++) { printf("\n%d", buf[i]); } return 0; }
-
memset ist doof. schreibt in jedes byte eine 1 rein.
memset macht also aus
memset(buf, 1, sizeof(int));
sowas:
00000001 00000001 00000001 00000001
macht 16843009dec für nen 4 byte integer.
musste also mit nem index initialisieren: buf[i] = 1;
mfg,
m.
-
memset arbeitet pro Byte, nicht pro int. Deswegen schreibst du ja auch als Laenge 100*sizeof(int).
-
Vielen Dank für eure Beiträge.
Kann ich die memset() so umstriken, das diese den kompleten int initiiert?
Ich habe jetzt mein Problem mit einer for-Schleife gelöst.
Mit buf[i] = 1;#include <stdio.h> #include <string.h> int main (void) { int buf[100]; memset(&buf[0], 0, 100*sizeof(int)); int i; for (i=0; i<10; i++) { buf[i] = 1; } for (i=0 ; i<100; i++) { printf("\n%d", buf[i]); } return 0; }
-
probier mal:
memset (buf, 0, sizeof(buf));
-
+fricky schrieb:
probier mal:
memset (buf, 0, sizeof(buf));
achso, missverständnis,
sowas geht nur mit 0 (bei ints). um andere werte reinzuschreiben, musst du 'ne schleife bemühen. hast du ein char-array, dann kannstes auch mit 'memset' initialisieren, aber bei multi-byte typen geht's nicht, weil aus sicht von memset alles einzelne bytes sind.
-
for (int i=0; i<(sizeof buf/sizeof *buf); i++) { buf[i] = i<10; }
-
Für die 0 geht das, aber nicht für die eins o.ä..
Ich möchte folgende Anweisung mit memset() realisieren.
Das die ersten 10 Werte mit 1 überschreiben.for (i=0; i<10; i++) { buf[i] = 1; }
-
Bitte letzen Beitrag von mir ignorieren.,
hab den Beitrag von fricky übersehen.
Danke Tim für deine Lösung.
-
zu Tims Lösung.
sizeof(*buf) diese Anweisung liefert die größe eines Datentyps.
aber warum?Vielen Dank.
-
sizeof buf
liefert ja die Größe des Arrays in Bytes und nicht die Anzahl der Elemente. Also teile ich durch die Größe (in Byte) eines Elementssizeof *buf
um die Anzahl der Elemente (Länge) des Arrays zu bekommen.