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
jonasEDIT: 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.