char [] [] und char** problem
-
Hi Leute,
bin auf ein kleines Problem gestoßen und hoffe nun, dass mir hier einer helfen kann.
Hier ein kleines Testprogramm, dass das Problem vereinfacht darstellt:void test(char** feld) { for(int i=0;i<6;++i) { for(int j=0;j<6;++j) { printf("%s",feld[i][j]); } } } int _tmain(int argc, _TCHAR* argv[]) { char feld[6][6]; for(int i=0;i<6;++i) { for(int j=0;j<6;++j) { feld[i][j] = '0'; } } test((char**)feld) }
Beim Ausführen stürzt das ganze ab, weil es einen Lesefehler hat.
wenn ich den Aufruf von "test" ohne cast auf char** mache, bekomme ich folgende Fehlermeldung:
error C2664: 'test' : cannot convert parameter 1 from 'char [6][6]' to 'char **'
Ich dachte eigentlich dass ein Feldzeiger vom Typ datentyp* ist(analog dann auch ein char[][] ein char** ist).
Kennt jemand den Fehler, oder hat vllt sogar nen Lösungsweg?Gruß
Andi
-
void test(char (*feld)[6]) { for(int i=0;i<6;++i) { for(int j=0;j<6;++j) { printf("%c",feld[i][j]); } } } int _tmain(int argc, _TCHAR* argv[]) { char feld[6][6]; for(int i=0;i<6;++i) { for(int j=0;j<6;++j) { feld[i][j] = '0'; } } test(feld); }
Jetzt wird 36 mal '0' ausgegeben !
Gruss
-
void test(char* feld) { for(int i=0;i<6;++i) { for(int j=0;j<6;++j) { printf("%c", *(feld+(i*6+j))); } } } int main(int argc, char* argv[]) { char feld[6][6]; char count = 'A'; for(int i=0;i<6;++i) { for(int j=0;j<6;++j) { feld[i][j] = count++; } } test(feld[0]); }
-
typedef char feld_t[6][6]; void test (feld_t feld) { int i; for(i=0;i<6;++i) { int j; for(j=0;j<6;++j) { printf("%d\n", feld[i][j]); } } } int main(int argc, char* argv[]) { feld_t feld; int i; for(i=0;i<6;++i) { int j; for(j=0;j<6;++j) { feld[i][j] = j+6*i; } } test (feld); }
-
Vielen Dank für die Antworten. Vorallem die Möglichkeit mit dem Typedef finde ich sehr schön.
-
Andi_S schrieb:
Vorallem die Möglichkeit mit dem Typedef finde ich sehr schön.
du kannst auch noch die hardcodierten konstanten aus dem code rausschmeissen:
typedef long feld_t[12][8]; #define FELDX(f) (sizeof(feld_t)/sizeof(f[0])) #define FELDY(f) (sizeof(f[0])/sizeof(f[0][0])) void test (feld_t feld) { int i; for(i=0;i<FELDX(feld);++i) { int j; for(j=0;j<FELDY(feld);++j) { printf("%d\n", feld[i][j]); } } } int main(int argc, char* argv[]) { feld_t feld; int i; for(i=0;i<FELDX(feld);++i) { int j; for(j=0;j<FELDY(feld);++j) { feld[i][j] = j+FELDX(feld)*i; } } test (feld); }