2 dimensionales char-array



  • Hi leute! ich hab ein problem! könnt ihr mir weiter helfen? das folgende programm stürtzt beim ausgeben des arrays ab!

    [...]
    
    void auslesen(char* cc[]){
     printf("cc[0]:%s\n",cc[0]); // stuertzt hier ab!!
    }
    
    int main(int argc,char**argv){
     char* cc[100];
     strcpy(cc[0],"hallo");
     auslesen(cc);
    
     return 0;
    }
    

    bin verzweifelt 😞 😞 😞 helft mir

    gruss
    jonas



  • Das erste Problem, welches schon beim strcpy() auftreten könnte/sollte, ist, dass du für die einzelnen cc[x], welche ja vom Typ char* sind, keinen Speicher reserviert hast. strcpy() wird hier ins Nirvana schreiben.

    Das zweite Problem, ich nehme an du ignorierst Warnungen deines Compilers, ist, dass der Aufruf von auslesen() nicht mit dessen Prototyp zusammenpasst.

    Korrigert und entsprechend erweitert könnte das Programm so aussehen:

    void auslesen(char cc[][10]){
     // void auslesen(char (*cc)[10]) wäre equivalent
     printf("cc[0]:%s\n",cc[0]);
    }
    
    int main(int argc,char**argv){
     char cc[100][10]; // hier gleich Speicher für 2. Dimension reserviert
     strcpy(cc[0],"hallo");
     auslesen(cc);
    
     return 0;
    }
    

    Links zum Lesen:
    http://c-faq.com/aryptr/pass2dary.html
    http://c-faq.com/aryptr/index.html <- das ganze Kapitel ist wichtig und interessant



  • ok danke aber wie schreib ich das in der header-datei?
    wenn ich das schreib:

    void auslesen(char cc[][10]);
    

    kommt folgender fehler:

    src/gui.cpp:109: error: no matching function for call to ‘auslesen(char [30][100])’
    src/gui.h:34: note: candidates are: void auslesen(char (*)[50])

    könnt ihr mir weiterhelfen?

    gruss
    jonas

    EDIT: hatte einen anderen fehler! hat sich erledigt!



  • anstatt

    void auslesen(char cc[][10]);
    

    das:

    void auslesen(char **cc);
    

    sonst gehts wahrscheinlich nicht 😉



  • es funktioniert aber das hat den nachteil dass man immer genau diese größe übergeben muss! ist doch blöd geht das nicht anders?



  • .. Informiere dich ueber Pointer, wir helfen dir nciht bei Dingen die tausendfach
    durchkaut wurden.


Anmelden zum Antworten