char filename[100];
char *file;
fgets(filename,100,stdin);
file =&filename;
发出此警告:
warning: assignment from incompatible pointer type [enabled by default]
file =&filename;
&文件名和文件与字符地址的类型不同,因为我使用&获取变量的地址?
答案 0 :(得分:5)
您的变量file
的类型为char *
但是当您在数组&
上应用地址运算符filename[100]
时,它的类型为char (*)[100]
。< / p>
显然,类型char *
和char (*)[100]
是不兼容的。要解决问题,请写:
file = filename;
或
file = &filename[0];
答案 1 :(得分:3)
我喜欢明确这个并使用
file = &filename[0];
filename
是数组的标识符。对于记录,它是不是指针(尽管在某些情况下它可以衰减指针)。 filename[0]
是此数组的第0个元素。获取该地址会为您提供指向该数组的第0个元素的指针。使用file
的指针算法有效,因为它指向您拥有的连续内存块。
答案 2 :(得分:2)
将file = &filename;
替换为file = filename;
。
答案 3 :(得分:2)
file = filename;
或替代
file = &(filename[0]);
filename [100]是一个数组,而filename(没有括号)指向该数组;