char pointer array an function übergeben?
-
Hi @ll, ich habe ein char Pointer Array erstellt was auf die einzelnen Char arrays zeigt.
Ich möchte den char pointer an die funktion ausgabe übergeben, die mir den Inhalt ausgibt. Nur irgendwie bekomm ich das nicht so ganz hinHoff mir kann geholfen werden
Gruß adlerauge6
#include <stdio.h> #include <stdlib.h> #include <string.h> void ausgabe(char *personen) { int i = 0; for (i = 0; i < 5; i++) { printf("\n"); int b = 0; for (b = 0; b < 3; b++) { printf("%s ", personen[i][b]); // Hier bin ich mir nicht mehr so sicher wie ich das anstelle } } } int main(void) { int i = 0, b = 0; char vorname1[] = { "Meier" }; char vorname2[] = { "Huber" }; char vorname3[] = { "Berger" }; char vorname4[] = { "Winkler" }; char vorname5[] = { "Maler" }; char namen1[] = { "Sepp" }; char namen2[] = { "Anton" }; char namen3[] = { "Franz" }; char namen4[] = { "Hans" }; char namen5[] = { "Horst" }; char stadt1[] = { "Mannheim" }; char stadt2[] = { "Regensburg" }; char stadt3[] = { "Passau" }; char stadt4[] = { "Regensburg" }; char stadt5[] = { "Passau" }; char *personen[5][3]; personen[0][0] = vorname1; personen[0][1] = namen1; personen[0][2] = stadt1; personen[1][0] = vorname2; personen[1][1] = namen2; personen[1][2] = stadt2; personen[2][0] = vorname3; personen[2][1] = namen3; personen[2][2] = stadt3; personen[3][0] = vorname4; personen[3][1] = namen4; personen[3][2] = stadt4; personen[4][0] = vorname5; personen[4][1] = namen5; personen[4][2] = stadt5; // Testausgabe des Inhalts ( Funktioniert ) for (i = 0; i < 5; i++) { printf("\n"); for (b = 0; b < 3; b++) { printf("%s ", personen[i][b]); } } ausgabe(personen); return EXIT_SUCCESS; }
-
----
-
So hatte ich das auch schon ...
wenn ich es mit
void ausgabe(char personen[][][]) { int i = 0; for (i = 0; i < 5; i++) { printf("\n"); int b = 0; for (b = 0; b < 3; b++) { printf("%s ", personen[i][b]); } } }
habe bekomm ich folgende meldung:
error: array type has incomplete element type
UND mit
void ausgabe(char ***personen) { int i = 0; for (i = 0; i < 5; i++) { printf("\n"); int b = 0; for (b = 0; b < 3; b++) { printf("%s ", personen[i][b]); } } }
folgendes:
passing argument 1 of ‘ausgabe’ from incompatible pointer type
ist zwar nur ne Warning aber es geht rozdem nicht
Muss ich das an ausgabe auch anderst vll übergeben? .. hmm
Gruß
-
Arghhh,
Mein Fehler:
void ausgabe(char* personen[5][3])
-
Super so hats geklappt.
Gibt es aber auch eine Möglichkeit das flexibler zu übergeben. d.h falls sich die Größe ändert.
d.h etwa auf die Art:
void ausgabe2(char *personen[][], int groesse1,int groesse2) { person[groesse1][groesse2]
Weil so wie es ja jetzt ist geht es nur wenn ich nicht mehr felder reinschreibe. sobald eine Person extra hinzukommt müsste ich ja das auch wieder ändern.
Nochmals Danke
-
Huhu,
da muss ich leider passen. Arbeite nicht gerne mit Mehrdimensionalen Arrays.
Eine Möglichkeit die mir spontan einfällt:
#define DIM1 100 #define DIM2 200 void ausgabe(char* personen[DIM1][DIM2]) { int i = 0; for (i = 0; i < DIM1; i++) { printf("\n"); int b = 0; for (b = 0; b < DIM2; b++) { printf("%s ", personen[i][b]); } } }
-
Hab was gefunden:
In other words, the compiler can't determine what size to expect. The general rule for passing arrays as parameters is that either specify all dimensions or only leave the leftmost dimension unbounded. All other dimensions have to be defined.
D.h so kann man es machen:
void ausgabe(char *personen[5][3]) {
void ausgabe2(char *personen[][3], int groesse1) {Aber so wie ich das versteh kann ich dann ja nie dynamisch das Übergeben z.B ein 4x4 oder z.B 4x10 Array nur immer ein 3x3 oder 10x3 Array
-
adlerauge6 schrieb:
sobald eine Person extra hinzukommt müsste ich ja das auch wieder ändern.
mach einfach eine 0 als endekennung ran. beispiel
void ausgabe (char **personen) { while (*personen) // <-- solange nicht 0 puts (*personen++); } int main (void) { char *personen[] = {"tinky winki", "la-la", "dipsy", "po", 0}; // <<- bei 0 ist ende ausgabe (personen); }
-
Wie waere es denn mit einer Datenstruktur ?
-
Das wäre auch ne möglichkeit.. Hatte halt anfangs gedacht, dass ich das genau so wie mit nem int array machen kann.. Da kann man ja sagen
void test(int array[], int groesse)
Daher dachte ich das das dann vll auch mit nem 2 -Dim Array genauso geht.
Gruß