char-Array(4x3) in anderen char-Array(2x3) speichern
-
Hallo,
ich hab die char-Matrix grafik mit folgenden Werten belegt:
grafik(4x3)=
"g" "g" "g"
"1" "1" "1"
"f" "e" "s"
"g" "g" "g"und möchte aus dieser die 1. und 3. Zeile in eine neue char-Matrix array_new schreiben:
array_new(2x3) =
"g" "g" "g"
"f" "e" "s"Wie kann ich mein Programm so umschreiben, dass diese Belegung durchgeführt wird???
#include <stdio.h> #include <malloc.h> #include <iostream.h> #include <stdlib.h> #include <string.h> int main() { char **array_new1,i; char * grafik[4][3]; // Belegung der Matrix grafik (4 Zeilen, 3 Spalten grafik[0][0]="g"; grafik[0][1]="g"; grafik[0][2]="g"; grafik[1][0]="1"; grafik[1][1]="1"; grafik[1][2]="1"; grafik[2][0]="f"; grafik[2][1]="e"; grafik[2][2]="s"; grafik[3][0]="g"; grafik[3][1]="g"; grafik[3][2]="g"; // Speicherplatzreservierung für array_new1(2 Zeilen, 3 Spalten) array_new1 = (char**) malloc(2*sizeof(char*)); for(i=0;i<2;i++) array_new1[i]=(char*) malloc(3*sizeof(char*)); memcpy(array_new1,grafik,3); free(array_new1); return 0; }
-
Na genauso wie Du den Quelltext davor geschrieben hast.
Mit dem Editor
Was hast Du denn bisher versucht um das Problem zu lösen ?
-
Das ist keine char- sondern eine string-matrix. Was du machen willst ist eigentlich
char grafik[4][3]; grafik[0][0] = 'f'; //...
Dann klappts auch mit dem memcpy.
-
ich will den neuen array_new mit der 1. und 3. Zeile des alten Arrays belegen und mit memcpy kann ich doch nur count-Zeichen aus grafik in array_new speichern?!
memcpy(void * to,const void * from, size_t count);
-
Der Trick liegt dabei das
[0][0]
[0][1]
[0][2]hinterinander im Speicher liegen.
Nun Kopierst Du grafik um. Damit hast Du die erste Zeile.
Wenn Du nun die Adresse von Grafik so erhöhst das Du auf [2] kommst
Du dahin was Du haben willst.Entweder verstehe ich Dich nicht richtig, oder Du willst einfach nur die Lösung programmiert haben ohne Dir gedanken zu machen.
memcpy will die Adresse haben. Und Du kannst nun mit hilfe eines Offset die adresse geben.
-
ich mach mir schon seit Stunden Gedanken und krieg's nicht hin.
memcpy(array_new1,&grafik,3);
somit wird nur array_new1[0][0] mit g belegt, warum aber nicht array_new1[0][1], array_new1[0][2] auch mit g.
Forum ist zum Fragen da, wenn ich was nicht weiß heißt's noch lange nicht, dass mir jemand ein vollständiges Programm abgeben soll.
-
Ich steh aufm Schlauch :o(
for(i=0;i<2;i++) array_new1[i]=(char*) malloc(3*sizeof(char*)); memcpy(array_new1,grafik,3);
das gleiche wie:
for(i=0;i<2;i++) { array_new1[i]=(char*) malloc(3*sizeof(char*)); } memcpy(array_new1,grafik,3);
Du legst also massig speicher an und kopierst dann die ersten 3 Bytes von grafik in array_newl hinein.
char * grafik[4][3];
Ist übrigens nur ein Zeiger auf das Array. Damit gibts den Speicher noch nicht.
Die Zuweisungen gehen also irgendwo hin...Auch wäre grafik[0][0] = 'g' passender weil "g" = "g\0" ist.
-
Info:
Die Speicherplatzreservierung muss so gemacht werden, da ich Platz für Zeilen und Spalten brauche. array_new1 = (char**) malloc(2*sizeof(char*)) bedeutet Speicherplatzreservierung im RAM des Rechners.char ** array_new1,i; // Speicherplatzreservierung für array_new1(2 Zeilen, 3 Spalten) array_new1 = (char**) malloc(2*sizeof(char*)); for(i=0;i<2;i++) array_new1[i]=(char*) malloc(3*sizeof(char*));
-
Mag ja sein, dennoch weiß ich nicht wo Dein Problem ist.
Kommst mit den Zeigern nicht klar ?