2D char Array übergeben, kopieren und zurückgeben
-
Hallo,
Ich möchte ein 2D char Array in einer Funktion kopieren und die Kopie zurückgeben.
Leider muss es ein Array und darf kein Vector sein. Die Größen des Arrays sind festgelegt und das Original ist als globales Array abgelegt.#include <iostream> using namespace std; const int HEIGHT = 21; const int WIDTH = 16; char field [HEIGHT][WIDTH] = { "###############", "#CGo. #", //C = pac G = Ghost o = fruit . = points; nur zu testzwecken "# ## ### #### #", "# ## ### #### #", "# #", "# ######## # #", "# # # #", "# # ##### # #", "# # ##### # #", "# # # #", "# # # #", "# #", "# ## ######## #", "# ## ######## #", "# ## ######## #", "# #", "# ### ### #", "# ########### #", "# ########### #", "# #", "###############", }; char copyArray() { int j = 0; for (int i = 0; i < HEIGHT; i++) { newField[i][j] = field[i][j]; for (int j = 0; j < WIDTH; j++) newField[i][j] = field[i][j]; } return newField[1][1]; } int main() { char newField[HEIGHT][WIDTH] = copyArray(); cout << newField[1][1] << endl; return 0; }Ich hab es schon geschafft das Array zu kopieren und in der Funktion direkt auszugeben. Allerdings eben nicht die Übergabe

Mfg
-
Und das ist eines der Gründe wieso in C++11 std::array eingeführt wurde.

Vorschlag:template <typename T, std::size_t Size> void copy_arr(T src[], T (&dst)[Size]) { for (auto i = 0u; i < Size; ++i) dst[i] = src[i]; }(ungetestet)
-
Danke für deinen Vorschlag Nathan!
Ich weiß Arrays sind doof. Das hab ich in der letzten Woche rumgooglen zu dem Problem auch rausgefunden :D.
Aber die Aufgabe verlangt von mir das ganze so zu machen:(a) Implementieren Sie eine Funktion copyArray, die ein zweidimensionales Array mit festen Dimensionen in ein
anderes Array kopiert, d.h. die Funktion soll z.B. obiges Array maze in ein anderes Array kopieren.(Das Array maze war nur ein Beispiel, ich nehme mein field Array.)
Das ist eine Hausaufgabe mit der ich schon eine Woche im Verzug bin. Der Rest ist soweit kein Problem, aber dieses doofe kopieren gelingt mir einfach nicht.Da wir templates noch nicht behandelt haben denke ich nicht das ich die benutzen darf.
Ist das denn unmöglich mit einer einer Funktion wie der oben?
-
Versuchs mal so:
void copy_arr(int dst[HEIGHT][WIDTH], int src[HEIGHT][WIDTH]) { // Schleife }
-
Ist das denn unmöglich mit einer einer Funktion wie der oben?
Nein, das ist durchaus möglich.
void* copy_array( void const* src, void* dest, std::size_t N ) { unsigned char const* p = src; unsigned char* p2 = dest; while( N-- ) *p2++ = *p++; return dest; }(ungetestet)
Und das ist eine typische Funktion, wie sie in C vorkommt. Und was besseres fällt mir nicht ein, ganz ohne Templates...
-
Ich hab das jetzt folgend:
char copyArray(char newField[HEIGHT][WIDTH], char field[HEIGHT][WIDTH]) { int i = 0; int j = 0; for (int i = 0; i < HEIGHT; i++) { newField[i][j] = field[i][j]; for (int j = 0; j < WIDTH; j++) newField[i][j] = field[i][j]; } return newField[i][j]; } int main(){ char newField[0][0] = copyArray(); cout << newField[1][1] << endl; return 0; }Allerdings gibt er mir bei copyArray(char newField[HEIGHT][WIDTH], char field[HEIGHT][WIDTH])
diesen Error:
http://img534.imageshack.us/img534/8116/0nrm.pngIch bin echt am verzweifeln. Alles was ich machen soll klappt aber das einfach nicht ..
-
Vielleicht solltest du dir erst einmal angucken, wie Funktionen mit Parametern funktionieren, bevor du mit Arrays rumspielst.
-
SeppJ schrieb:
Vielleicht solltest du dir erst einmal angucken, wie Funktionen mit Parametern funktionieren, bevor du mit Arrays rumspielst.
Tut mir leid, ich bin grade zu fertig damit.
Das hier ist ein simples Beispiel wie ich es gelernt habe mit der Übergabe/Rückgabe.
int calc (int x){ return x*x*x; } int main() { int length = 0; cout << "Kantenlänge eingeben: " << endl; cin >> length; cout << "Volumen beträgt: " << calc(length) << endl; return 0; }Aber ich bekomm es einfach nicht hin mit Arrays, damit stell ich mich zu doof an

-
Funktioniert:
int calc (int x){ ... cout << "Volumen beträgt: " << calc(length) << endl;Fehler:
char copyArray(char newField[HEIGHT][WIDTH], char field[HEIGHT][WIDTH]) { ... char newField[0][0] = copyArray();Fehlt da nicht irgendwas?
P.S.: Das heißt nicht unbedingt, dass deine Funktion macht, was du willst, was sie macht, wenn du diesen Fehler korrigierst. Aber ein Schritt nach dem anderen. Erstmal die Grundlagen von Funktionen lernen.
-
Hm beim Aufruf von der copyArray Funktion muss ich was übergeben, also
char newField[0][0] = copyArray(newField[HEIGHT][WIDTH]);Allerdings bin ich mir nicht sicher ob ich die Höhe und Breite auch übergeben muss, die hab ich ja schließlich schon in einer globalen Variable.
-
Lies im Grundlagenbuch deiner Wahl nochmal nach, wie man Arrays erstellt, an Funktionen uebergibt und einzelne Elemente adressiert.