memset()

Schnelle objektorientierte, kompilierende Programmiersprache.
Antworten
SeriK00
Beiträge: 34
Registriert: Fr Mai 15, 2009 12:15 pm

memset()

Beitrag von SeriK00 » Di Mai 26, 2009 9:01 am

#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;
}
Windows XP Prof
Visual Studion 2005
Keil µVision 3

Benutzeravatar
Kerli
Beiträge: 1456
Registriert: So Jul 06, 2008 10:17 am
Wohnort: Österreich
Kontaktdaten:

Re: memset()

Beitrag von Kerli » Di Mai 26, 2009 9:48 am

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.
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)

OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at

Benutzeravatar
fat-lobyte
Beiträge: 1398
Registriert: Sa Jul 05, 2008 12:23 pm
Wohnort: ::1
Kontaktdaten:

Re: memset()

Beitrag von fat-lobyte » Di Mai 26, 2009 10:03 am

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>.
Haters gonna hate, potatoes gonna potate.

Antworten