文件操作(二进制读写)

复制代码
/***
a.txt
***/
this is a word
helloworld

/***
file.c
***/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    FILE *p = fopen("./a.txt","r");
    while(!feof(p))
    {
        char buf[100] = {0};
        fscanf(p,"%s",buf);
        printf("%s\n",buf);
    }
    fclose(p);
    return 0;
}
复制代码

fscanf()函数和scanf函数用法一样。fscanf是从一个文件中读取字符串,scanf是从键盘读取字符串。(遇到空格就停止)

复制代码
/***
a.txt
***/
23 + 45 = 
35 + 63 =
34 + 45 =

/***
file1.txt
***/
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

int main()
{
    int a,b;
    FILE *p = fopen("./a.txt","r");
    while(!feof(p))
    {
        char buf[100] = {0};
        //fgets(buf,"%s",p);
        //fscanf(p,"%s",buf);
        fscanf(p,"%d + %d = ",&a,&b);
        printf("a = %d , b = %d\n",a,b);
        //printf("%s\n",buf);
    }
    fclose(p);
    return 0;
}

/***
fprintf.c
***/
#include<stdio.h>
#include<string.h>

int main()
{
    FILE *p = fopen("./b.txt","w");
    char buf[100] = "hello world";
    fprintf(p,"%s",buf);
    fclose(p);
    return 0;
} 
复制代码

fread()函数和fwrite()函数:操作文本文件和二进制文件

fopen()函数只能读文本文件

复制代码
/***
fread.c
***/

#include<stdio.h>
int main()
{
    FILE *p = fopen("./a.txt","rb");
    char buf[100] = {0};
fread(buf,sizeof(char),1,p); //第一个参数是缓冲区,第二个参数是读取字节大小,第三个 //参数表示读取字节个数,第四个参数表示文件指针
    printf("buf = %s\n",buf);
    fclose(p);
    return 0;
}

/***
fread1.c
***/

#include<stdio.h>
int main()
{
    FILE *p = fopen("./a.txt","rb");

    while(!feof(p))
    {
        char buf[20] = {0};
        fread(buf,sizeof(char),sizeof(buf),p);
        printf("buf = %s\n",buf);
    }
    fclose(p);
    return 0;
}
复制代码

fread()函数有返回值,返回的是size_t类型,unsigned int ==》 %u

复制代码
/***
fread.c
***/
#include<stdio.h>
int main()
{
    FILE *p = fopen("./c.txt","rb");
    char buf[1024] = {0};
    size_t res = fread(buf,sizeof(char),sizeof(buf),p);
    printf("res = %u\n",res);
/*
    while(!feof(p))
    {
        char buf[20] = {0};
        fread(buf,sizeof(char),sizeof(buf),p);
        printf("buf = %s\n",buf);
    }
*/
    fclose(p);
    return 0;
}

/***
c.txt
***/
asd
复制代码

运行结果:res = 4(文件结尾有一个换行字符‘\n’?);

 

size_t res = fread(buf,sizeof(int),sizeof(buf),p);

运行结果:res = 1;

 

以上程序的运行结果和windos环境下读文本文件的结果会出现差异。

复制代码
/***
fwrite.c
***/
#include<stdio.h>

int main()
{
    FILE *p = fopen("./d.txt","wb");
    char buf[1024] = {0};
    buf[0] = 'a';
    buf[1] = 'b';
    buf[2] = 'c';
    fwrite(buf,sizeof(char),sizeof(buf),p);
    fclose(p);
    return 0;
}
复制代码

运行结果:abc

文件大小是1K(buf)数组大小,文件后面全是0。

复制代码
/***
fwrite.c
***/
#include<stdio.h>

int main()
{
    FILE *p = fopen("./d.txt","w");
    int a = 0x12345678;
    fwrite(&a,sizeof(char),4,p);
    fclose(p);
    return 0;
}
复制代码

 

posted @   王清河  阅读(2485)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示