2016-06-14 12 views
2
char filename[100]; 
char *file; 
fgets(filename,100,stdin); 
file =&filename; 

diese Warnung geben:Char & Char Zeiger ist inkompatibler Zeigertyp?

warning: assignment from incompatible pointer type [enabled by default] 
file =&filename; 

Ist das nicht & Dateiname und Datei hat die gleiche Art wie Adresse des Charakters, da ich & verwenden Adresse der Variablen zu bekommen?

+0

Die '[]' tatsächlich etwas bedeuten ... –

Antwort

2

Die Anweisung file = &filename; durch file = filename; ersetzen.

2
file = filename; 

oder alternativly

file = &(filename[0]); 

Dateinamen [100] ist ein Array, und einen Dateinamen (ohne Klammern) zeigt auf das Array;

3

Ich mag darüber explizit sein und

file = &filename[0];

filename ist eine Kennung für ein Array zu verwenden. Für den Datensatz ist es nicht ein Zeiger (obwohl es Zerfall zu einem Zeiger in bestimmten Fällen). filename[0] ist das nullte Element dieses Arrays. Unter Berücksichtigung der Adresse erhalten Sie einen Zeiger auf das nullte Element dieses Arrays. Zeigerarithmetik mit fileist gültig, da es auf einen zusammenhängenden Speicherblock zeigt, den Sie besitzen.

4

Ihre variable file hat char * geben, aber wenn Sie den Adressoperator & auf Ihrem Array anwenden filename[100], hat es char (*)[100] geben.

offensichtlich, Typen char * und char (*)[100] sind incompatible.To das Problem entweder Schreib zu lösen:

file = filename; 

oder

file = &filename[0]; 
+0

einzige Antwort als richtig erklärt den Typ von '& Dateiname'. – chux