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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.