Насколько я понимаю, передача указателя на функцию по существу передает копию указателя на функцию в C. У меня есть указатель FILE
, который я передаю функции func()
, func()
читает строку из файла, а затем, когда мы вернуться к main()
. Я прочитал еще одну строку из файла, используя тот же указатель FILE
.Почему указатель FILE после передачи функции изменяется, когда возвращается в main на 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' (который многие будут считать« файловым дескриптором », т. Е.' Int' из 'open()') является довольно плохим именем для переменной типа 'FILE *'? Очень смущает. – unwind