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

給這樣的警告:&char和char指針是不兼容的指針類型?

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

是不是&文件名和文件具有相同類型性格的地址,因爲我使用&來獲取變量的地址?

+0

的'[]'實際上意味着什麼... –

回答

2

將陳述file = &filename;替換爲file = filename;

2
file = filename; 

或alternativly

file = &(filename[0]); 

文件名[100]是一個數組,和文件名(沒有括號中)指向陣列;

3

我喜歡是明確的瞭解這個和使用

file = &filename[0];

filename是用於陣列的標識符。爲了記錄,它是而不是指針(儘管它可以在某些情況下將衰減指向一個指針)。 filename[0]是這個數組的第零個元素。取這個地址給你一個指向該數組的第零個元素的指針。指針運算使用file有效,因爲它指向您擁有的連續內存塊。

4

你的變量file具有類型char *,但是當您在陣列filename[100]上應用的地址的運營商&,它的類型是char (*)[100]

明顯,類型char *char (*)[100]是incompatible.To解決問題,或者請寫:

file = filename; 

file = &filename[0]; 
+0

只比正確回答解釋'&filename'的類型。 – chux