據我瞭解,傳遞指向函數的指針本質上是將指針的副本傳遞給函數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