Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Array kopieren

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
22.05.2003, 22:39 Uhr
~Taz
Gast


Mal eine Anfängerfrage. Wie kann ich den Inhalt eines zweidimensionalen Arrays kopieren der "=" Operator funtioniert ja nicht und über for-Schleifen find ich es ein wenig aufwendig.

Thx Taz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
22.05.2003, 23:10 Uhr
~ao
Gast


Hi Taz, du kannst memcpy nehmen.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
23.05.2003, 08:59 Uhr
~Taz
Gast


Danke, funktioniert wunderbar.

Allerdings ist mir die die Option "size_t" bei memcpy ein Rätsel. Wenn ich ein Array mit 8*8 Elementen kopiere und 64 eintrage, wird nur die erste Zeile kopiert. Mit einem deutlich größeren Wert klappt es aber.
Was gibt denn der Wert genau an?

CU Taz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
23.05.2003, 10:16 Uhr
virtual
Sexiest Bit alive
(Operator)


Wie hast Du denn Dein Array deklariert?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
23.05.2003, 10:17 Uhr
ao

(Operator)



Zitat:
~Taz postete
Danke, funktioniert wunderbar.

Allerdings ist mir die die Option "size_t" bei memcpy ein Rätsel. Wenn ich ein Array mit 8*8 Elementen kopiere und 64 eintrage, wird nur die erste Zeile kopiert. Mit einem deutlich größeren Wert klappt es aber.
Was gibt denn der Wert genau an?

CU Taz



Das ist die Größe des Speicherbereichs in Bytes. Die Zeiger *dest und *src sind void*, also "nackte" Speicheradressen ohne Information, welche Datentypen dort abgelegt sind und wie groß ein Element ist. Darum mußt du memcpy mitteilen, wie viele Bytes kopiert werden sollen.

In deinem Beispiel hast du den Befehl gegeben, 64 Bytes zu kopieren. Wenn jedes deiner Elemente 8 Bytes groß ist (double zum Beispiel), hat memcpy genau das getan.

Gruß

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
23.05.2003, 11:24 Uhr
~Taz
Gast


@ao
Aha, das ist des Rätsels Lösung. Hab mein Array als double deklariert. Der korrekte Wert für 64 Elemente müsste demzufolge 512 sein.
Hat es irgendwelche negative Auswirkungen falls man den Wert zu groß wählt, z.B. 1000?

Taz
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
23.05.2003, 11:33 Uhr
virtual
Sexiest Bit alive
(Operator)


Ja. Es wird dann umkontrolliert Speicher überschrieben. Man sollte niemals zviel und auch niemals zuwenig SPeicher mit memcpy kopieren, sondern stets exakt das, was richtig ist
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
23.05.2003, 12:04 Uhr
~0xdeadbeef
Gast


...und wenn unkontrolliert Speicher überschrieben wird, schmeißt dir das System SIGSEGVs.

Die Größe des Arrays ist abhängig von der Länge des Arrays und der Größe des Datentyps. Zum Beispiel:

C++:
double d[100]; /* Länge = 100 * sizeof(double) = 100 * 32 = 3200 */
unsigned long long ll[200]; /* Länge = 200 * sizeof(unsigned long long) = 200 * 64 = 12800 */


Jeweils auf einer 32-bit-Maschine. Auf 64-bit-Prozessoren sieht das wieder ganz anders aus.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
23.05.2003, 12:05 Uhr
~0xdeadbeef
Gast


Normalerweise macht es Sinn, den Ausdruck mit sizeof zu benutzen, weil der Code so am portabelsten bleibt.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
23.05.2003, 12:31 Uhr
ao

(Operator)



Zitat:
~Taz postete
[i]@ao
Aha, das ist des Rätsels Lösung. Hab mein Array als double deklariert. Der korrekte Wert für 64 Elemente müsste demzufolge 512 sein.



Ja, aber hüte dich davor, solche Dinge von Hand auszurechnen und Zahlenwerte in den Sourcecode einzusetzen. Wenn du mal eine andere Arraygröße brauchst, mußt du alle Stellen finden, die davon abhängen. Programme, die größer sind als eine Seite im Ausdruck, werden so im Handumdrehen unpflegbar.

ao
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: