c语言执行fgets时,如何判断是否到了文件末尾?

Python013

c语言执行fgets时,如何判断是否到了文件末尾?,第1张

如果文件末尾有一个空行,注意特别注意用fgets进行读,比如文件:

aaa 234 444 bbb

123 kkk 9 00 00000 0000

ccc 34

如果最后没有空行,即没有\n,读到ccc 34这行时,fgets遇到了EOF,结束,str="ccc 34\0"如果最后有空行;读到ccc 34这行时,fgets遇到了new line,str="ccc 34\n\0",此时文件未返回EOF,再次fgets时,遇到EOF,fgets返回NULL,str的内容没有变,因此用fgets读时判断是否该结束最好如此:

while(fgets(...)) {

...

}

而不要用

while(!feof()) {

fgets()

...

}

fgets()函数用于从文件流中读取一行或指定个数的字符,其原型为:char*fgets(char*string,intsize,FILE*stream)参数说明:string为一个字符数组,用来保存读取到的字符。size为要读取的字符的个数。如果该行字符数大于size-1,则读到size-1个字符时结束,并在最后补充'\0';如果该行字符数小于等于size-1,则读取所有字符,并在最后补充'\0'。即,每次最多读取size-1个字符。stream为文件流指针。【返回值】读取成功,返回读取到的字符串,即string;失败或读到文件结尾返回NULL。因此我们不能直接通过fgets()的返回值来判断函数是否是出错而终止的,应该借助feof()函数或者ferror()函数来判断。注意:fgets()与gets()不一样,不仅仅是因为gets()函数只有一个参数FILE*stream,更重要的是,fgets()可以指定最大读取的字符串的个数,杜绝了gets()使用不当造成缓存溢出的问题。

#include <stdio.h>

#include <string.h>

// #pragma warning(disable:4996)

const int MAXLEN  = 1000

int main() {

char s[MAXLEN] // = {0}

// memset(s, 0, sizeof(s)) // s要被多次使用的

FILE *p = fopen("E:\\输入信息得文本.txt", "w")

if(p == NULL) {

printf("不能打开文件。\n")

return 1

}

while (1) {

//gets(s)

fgets(s,MAXLEN,stdin)

// fgtes()函数读取的串中通常含有'\n'

int len = strlen(s)

if(s[len - 1] == '\n') s[len - 1] = '\0'

if (strcmp(s,"exit") == 0) break

fprintf(p,"%s\n",s)

}

fclose(p)

printf("end\n")

return 0

}