memset() --> Speicher nicht nur auf 0 stellen sondern auf Wert

Gast #3188694
Lesenswert?

Wenn ich schreibe :
1
memset(int_array, 0, sizeof(int_array));
dann wird alles schön brav auf 0 gesetzt.

Jedoch wenn ich schreibe
1
memset(int_array, 3, sizeof(int_array));
dann wird leider irgendwas in das int_array geschrieben, nur nicht 3.

Ich bekomme dann 16843009 für jedes integerelement.

Ich finde in keiner Dokumentation was über die FUnktion memset. Mit 0 
funktionierts, aber sonst?
#3188707
Lesenswert?

ERER schrieb:
> Wenn ich schreibe :
>
1
memset(int_array, 0, sizeof(int_array));
> dann wird alles schön brav auf 0 gesetzt.
>
> Jedoch wenn ich schreibe
>
1
memset(int_array, 3, sizeof(int_array));
> dann wird leider irgendwas in das int_array geschrieben, nur nicht 3.

Logisch.
memset betrachtet deinen Speicher als ein Array von Bytes und schreibt 
in jedes Byte eine binäre 3 rein.
Bei einem 16 Bit int, der nun mal aus 2 Bytes besteht, ergibt die 
Bytekombination 0x0303 dann eben 771. Bei einem 32 Bit int, der aus 4 
Bytes besteht, ist die Bytekombination 0x03030303 dann eben dezimal 
50529027

>
> Ich bekomme dann 16843009 für jedes integerelement.

das wäre 0x01010101. D.h. du hast einen memset mit 1 gemacht. Ist aber 
egal. Gleiches Problem.

>
> Ich finde in keiner Dokumentation was über die FUnktion memset.

Google ist schon erfunden.
Macht aber nichts. Alle mem... Funktionen betrachten deinen Speicher als 
Byte-Array und nicht mehr.

Wenn du was anderes brauchst, dann musst du selber Hand anlegen. Zb mit 
einer Schleife.
#3188713
Lesenswert?

Karl Heinz Buchegger schrieb:

>> Jedoch wenn ich schreibe
>>
1
memset(int_array, 3, sizeof(int_array));
>> dann wird leider irgendwas in das int_array geschrieben, nur nicht 3.
>
> Logisch.

Überleg dir einfach mal, wie memset mit diesen Argumenten rausfinden 
soll, dass du ein int-Array hast. Was wäre anders, wenn es ein 
long-Array wäre?
Eben. memset hat keine Information darüber, wie groß ein Element deines 
Arrays ist. Also KANN das was du vor hast, überhaupt nicht 
funktionieren! Du brauchst dir nur die Argument-SChnittstelle von 
Funktionen ansehen. Die erzählen dir schon eine Menge darüber, was eine 
Funktion kann und was sie nicht kann. Auch Systemfunktionen können nicht 
zaubern.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren