2016-06-14 101 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