Kar*_*eem 3 c file-io pointers
给出以下简短的例子
FILE *p = fopen("foo.txt", "r");
FILE f = *p;
int i;
fscanf(p, "%i", &i); // works just fine
fscanf(&f, "%i", &i); // segmentation fault
Run Code Online (Sandbox Code Playgroud)
我已经阅读了一些FILE,FILE *以及实际的结构类型_IO_FILE,但我不清楚在第二次调用中导致分段错误的原因是什么fscanf.
除了p并&f包含不同的地址之外,除非涉及到这一点(我认为是这样),在这种情况下&f和之间有什么区别p?
C标准(C99 7.19.3/6,C11 7.21.3/6)说:
用于控制流的FILE对象的地址可能很重要; FILE对象的副本不需要代替原始对象.
所以你被警告过了.