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则是出现异常了