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 hin 😞

    Hoff 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ß


Anmelden zum Antworten