【发布时间】:2021-12-29 19:46:58
【问题描述】:
我正在准备下周的考试,我很难理解 C 中的 fgets() 函数。
举个例子:
void main() {
FILE *fp;
char buff[2]
fp = fopen("test.txt", "r");
while (fgets(buff, sizeof(buff), fp)
/*I understand that this loop returns true aslong
as End-of-File is not encountered*/
printf("%s", buff);
fclose(fp)
}
据我了解,这个循环将获得一个包含 2 个元素(1 个字符 + '\0')的 char 数组,它如何知道跳过已经获得的元素?和fp指针有关系吗?
【问题讨论】:
-
fgets来自file-get-string。您尝试读取一个字符串而不是 2 个元素的 char 数组。阅读cplusplus.com/reference/cstdio/fgets。 -
@Akali 你错了。只读取一个字符。不附加换行符。
-
FILE *fp句柄会跟踪很多内部变量,例如文件中的位置等等。 -
简短的回答是“某事”会跟踪您打开的文件句柄的位置(这里抽象为
fp指向的FILE)。什么和如何取决于底层文件是如何实现的。 -
@Cheatah 在
FILE的内部变量中没有必要跟踪该位置。考虑直接从文件描述符中读取,这只是一个int,但那些也保持位置。例如,操作系统可能会跟踪该位置。