C fgetc

int fgetc(FILE *stream);

 

从stream指向的输入流(若存在)中读取unsigned char型的下一个字符的值,
并将它转换为int型,
然后,若定义了流的文件位置指示符,则将其向前移动。

若在流中检查到文件末尾,则设置该流的文件结果指示符并返回EOF。

fgetc:一个字符一个字符地读

 
#include <stdio.h> 

int main(void){
    int ch;
    FILE *fp;
    char fname[FILENAME_MAX];
    
    printf("文件名:");
    scanf("%s", fname);
    
    if((fp = fopen(fname, "r")) == NULL){
        printf("文件打开失败。\n");
    } else {
        while ((ch = fgetc(fp)) != EOF){
            putchar(ch);
        }
        fclose(fp);
    }
    
    return 0;
} 

C fgets

 
f 带缓冲的 
get 获取 
s 字符的串
读取一串字符

char *fgets(char *str, int n, FILE *stream):读取一行或n个字符

 
这里主要测试n可以有多大,一行数据9W个字符,可以说是很大了,或者n并没有长度限制,你想一行数据多长都行 

#include <stdio.h> 

int main()
{
    FILE *fp = NULL;
    fp = fopen("zz.txt", "r");   // w+ 表示可读可写
    int n = 90000;
    char buff[n];
    fgets(buff, n, (FILE*)fp); //读一行或255个字符
    printf("%s\n", buff );       //  每天 学习 五分钟

    fclose(fp);
}

n的长度必须是字符串所有字符的字节个数+1,不够时会舍弃最后一个字符

 
$ cat zz.txt 
都是你

 
#include <stdio.h> 

int main()
{
    FILE *fp = NULL;
    fp = fopen("zz.txt", "r");   // w+ 表示可读可写
    int n = 9;
    char buff[n];
    fgets(buff, n, (FILE*)fp); //读一行或255个字符
    printf("%s\n", buff );       //  每天 学习 五分钟

    fclose(fp);
}
        
$ gcc f2.c 
$ ./a.out 
都是

 
#include <stdio.h< 

int main()
{
    FILE *fp = NULL;
    fp = fopen("zz.txt", "r");   // w+ 表示可读可写
    int n = 9+1;
    char buff[n];
    fgets(buff, n, (FILE*)fp); //读一行或255个字符
    printf("%s\n", buff );       //  每天 学习 五分钟

    fclose(fp);
}
        
$ gcc f2.c 
$ ./a.out 
都是你

读取到文件结尾返回0

 
#include <stdio.h> 
FILE *fp = fopen("a.txt", "r");
if (fp == NULL) {
    fprintf(stderr, "open %s failed.\n",file_name);
    exit(EXIT_FAILURE);
}

int max_size=6000;
char row[max_size];
int data_index =0;
while (fgets(row, max_size, fp) != NULL) {
    printf("%s\n",row);
}
fclose(fp);

fread

size_t fread(void *ptr, size_t size, size_t count, FILE *stream)

 
参数说明:
  - ptr:指向用于存储数据的内存块的指针,写到哪里
  - size:要读取的每个元素的大小,以字节为单位,即一次读多少个字节
  - count:要读取的元素数量,即读多少次
  - stream:文件指针,从哪里读取

返回值:返回值为实际读取到的字节数
  - 大于0是正常
  - 等于0表示读取文件结尾了
  - 小于0则是出现异常了

参考文章