据我了解,传递指向函数的指针本质上是将指针的副本传递给函数C.我有一个FILE
指针,我将其传递给函数func()
,func()
从文件中读取一行,然后当我们返回main()
。我使用相同的FILE
指针从文件中读取另一行。为什么FILE指针在被传递给一个函数后在C中返回主时会改变?
但是,虽然我会想象我会在func()
之前完全读取该行,但我实际上在读取了func()
之后的下一行。 你能解释为什么FILE
指针的行为是这样吗?
这是我的代码:当读文件得到改变/写上一些数据
#include <stdio.h>
#define STR_LEN 22
void func(FILE *fd);
int main() {
FILE *fd;
char mainString[STR_LEN];
if (!(fd = fopen("inpuFile", "r"))) {
printf("Couldn't open file\n");
fprintf(stderr, "Couldn't open file\n");
}
func(fd);
fgets(mainString, STR_LEN, fd);
printf("mainString = %s\n", mainString);
fclose(fd);
return 0;
}
void func(FILE *fd) {
char funcString[STR_LEN];
fgets(funcString,STR_LEN, fd);
printf("funcString = %s\n", funcString);
}
我可以说'fd'(很多会读作“文件描述符”,即来自'open()'的int)对于类型为FILE *的变量来说是一个相当糟糕的名字吗?非常混乱。 – unwind