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 Elements sizeof *buf um die Anzahl der Elemente (Länge) des Arrays zu bekommen.


Anmelden zum Antworten