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:
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]
)
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).