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; }
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);
size_t fread(void *ptr, size_t size, size_t count, FILE *stream)
参数说明: - ptr:指向用于存储数据的内存块的指针,写到哪里 - size:要读取的每个元素的大小,以字节为单位,即一次读多少个字节 - count:要读取的元素数量,即读多少次 - stream:文件指针,从哪里读取 返回值:返回值为实际读取到的字节数 - 大于0是正常 - 等于0表示读取文件结尾了 - 小于0则是出现异常了