Seite 1 von 1

memset()

Verfasst: Di Mai 26, 2009 9:01 am
von SeriK00
#include <stdio.h>
Hallo,
die ersten 100 Elemente habe ich mit 0 überschrieben,
dann wollte ich die ersten 10 mit 1 überschreiben, das geht leider nicht.
Warum?
Vielen Dank im Voraus.

Code: Alles auswählen

#include <string.h>

int main (void)
{
	int buf[100];
	memset(&buf[0], 0, 100*sizeof(int));
	memset(&buf[0], 1, 10*sizeof(int));
	int i;
	for (i=0 ; i<100; i++)
	{
		printf("\n%d", buf[i]);
	}

	return 0;
}

Re: memset()

Verfasst: Di Mai 26, 2009 9:48 am
von Kerli
SeriK00 hat geschrieben:dann wollte ich die ersten 10 mit 1 überschreiben, das geht leider nicht.
Das liegt daran das memset byteweise schreibt. Wenn du also einen normalen 32-Bit Integer hast dann schreibst du damit an jedes Ende der vier Bytes eine 1 wodurch der Integer nach dem memset hexadezimal 0x01010101 lautet. Das ist aber wahrscheinlich nicht das was du dir erwartet hast ;)

Wenn du auf die "echte" 1 setzen willst wirst du um das Verwenden einer Schleife bzw. das Schreiben einer eigenen Funktion nicht herumkommen.

Re: memset()

Verfasst: Di Mai 26, 2009 10:03 am
von fat-lobyte
Für C++ Benutzer sei noch das Funktionstemplate fill und fill_n erwähnt, das eine typsichere Alternative zu memset darstellt:

Code: Alles auswählen

#include <iostream>
#include <algorithm>

int main()
{
    int buf[100];

    std::fill_n(buf, 100, 0);
    std::fill_n(buf, 10, 1);

    for (int i=0; i<100; i++)
        std::cout<<buf[i]<<'\n';

    return 0;
}
ps.: memset ist in <string.h> (bzw. <cstring>) und nicht in <stdio.h> und auch nicht in <stdlib.h>.