C error Array: Der Array-Typ hat einen unvollständigen Elementtyp.

7

Ich habe:

%Vor%

Es ist korrekt in Solaris kompiliert, aber in Redhat Linux zeigt es den folgenden Fehler:

%Vor%

Ich weiß, dass ich es lösen kann als - char[][20]

Ist es der richtige Weg?

    
ambika 18.03.2010, 07:50
quelle

2 Antworten

17

Sie müssen wissen, was die Funktion tatsächlich erwartet, und die Schnittstelle entsprechend anpassen. Wenn es ein zweidimensionales Array ( char [N][M] ) erwartet, wäre die korrekte Schnittstelle:

%Vor%

Was anders ist als:

%Vor%

Im ersten Fall würde die Funktion einen Zeiger auf einen zusammenhängenden Speicherblock erwarten, der N*M -Zeichen ( &p[0][0]+M == &p[1][0] und (void*)&p[0][0]==(void*)&p[0] ) enthält, während im zweiten Fall ein Zeiger auf einen Block erwartet wird des Speichers, der N -Zeiger auf Speicherblöcke hält, die zusammenhängend sein können oder nicht ( &p[0][0] und &p[1][0] sind nicht verwandt und p[0]==&p[0][0] )

%Vor%     
quelle
2

char *[M] unterscheidet sich nicht von char ** . char *[M] ist ein Array von Zeigern auf char. Die Dimension spielt in C (in diesem Fall) keine Rolle. Was David meinte, war char (*)[M] , was ein Zeiger auf ein Array von M Zeichen ist, welches der richtige Typ für Ihren Prototyp wäre - aber Ihr char [][M] ist auch in Ordnung (tatsächlich ist es die gebräuchlichere Formulierung).

    
slartibartfast 18.03.2010 13:16
quelle

Tags und Links