zoukankan      html  css  js  c++  java
  • c语言文本操作的基本原理

     在这里我们主要说的是数据用二进制形式读取和文本形式进行读取的主要区别。

    使用文本形式进行读取时,其实实际上就是将数据转换为字符存入文本文件中

    下面测试:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        FILE *fp;
        int a,b;
        if((fp=fopen("d:\abc\ceshi.txt","w"))==NULL)
           {
               printf("error!
    ");
               exit(0);
           }
        a=123;
        fprintf(fp,"%d%d",a,a);
        fclose(fp);
    }
    然后打开文件可见文件中数据为123123

    下面我们读取这个数据并且用程序显示出来

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        FILE *fp;
        int a,b;
        if((fp=fopen("d:\abc\ceshi.txt","r"))==NULL)
           {
               printf("error!
    ");
               exit(0);
           }
        a=123;
        fscanf(fp,"%d",&b);
        fclose(fp);
        printf("b=%d
    ",b);
    }
    可见运行结果b=123123

    那么再来一个测试

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        FILE *fp;
        int a,b,a1,a2;
        if((fp=fopen("d:\abc\ceshi.txt","r"))==NULL)
           {
               printf("error!
    ");
               exit(0);
           }
        a=123;
        fscanf(fp,"%3d%3d",&a1,&a2);
        fclose(fp);
        printf("a1=%d,a2=%d",a1,a2);
    }
    运行结果:a1=123,a2=123

    是不是用文本方式读取数据时,将文本字符按照一定的格式转换为所需数据然后赋给对应的变量。

    那么再测试:

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        FILE *fp;
        int a,b,a1,a2;
        if((fp=fopen("d:\abc\ceshi.txt","r"))==NULL)
           {
               printf("error!
    ");
               exit(0);
           }
        a=123;
        fscanf(fp,"%4d%2d",&a1,&a2);
        fclose(fp);
        printf("a1=%d,a2=%d",a1,a2);
    }
    咱们先来猜猜结果是什么,

    O(∩_∩)O,没错就是a1=1231,a2=23;

    实际上将一个字符串s1="12341234"输入文本,然后用int类型进行读取,得出的数值就是12341234

    根据这次测试可以说明在以文本进行读取时,实际上是将文本中的字符按照对应的格式转化过来再赋给对应的变量。也就是说用fprintf实际是将数据转化为字符存入文本中,fscanf()实际是将字符转化为对应的数据然后赋给对应的变量。(文本操作方式)


    二进制方式进行读取数据是采用位进行读取;

    #include<stdio.h>
    #include<stdlib.h>
    int main()
    {
        FILE *fp;
        int a=123,b,a1,a2;
        if((fp=fopen("d:\abc\ceshi.txt","wb"))==NULL)
           {
               printf("error!
    ");
               exit(0);
           }
          fwrite(&a,sizeof(a),1,fp);
          fwrite(&a,sizeof(a),1,fp);
          fclose(fp);
    }


    用二进制方式读取数据时采用的读取方式一般为fread(),fwrited();也是采用块进行读取;(在存储大量数据,比如在图书管理系统中一般都是用这样的方式进行储存)。

    在二进制方式进行读取时,不存在这样的情况因为是fread ()fwrited()是严格按照块进行读取数据的,(也就是你告诉他读取的字节数,然后从fp所指向处读取该字节数将赋给a的地址);

    用二进制储存的数据是无法查看的(会乱码)



    其次注意的是二进制方式读取只能用fread(),fwrited();而且fread(),fwrited()也只能用于二进制方式进行读取


    以上如果有错误,请在下方评论区指出,我将不胜感激。

  • 相关阅读:
    Linux系统调用函数
    服务器编程模型
    Make bare repository out of git svn init
    关于云的思考
    LDAP groovy 访问代码样例
    恢复corrupted gitsvn repository的过程记录
    代码提交日志规范
    Oracle SqlDeveloper/Jdeveloper extension
    HowTo Change Oracle SqlDeveloper Languange
    Nginx 502 Bad Gateway错误的解决办法
  • 原文地址:https://www.cnblogs.com/dchnzlh/p/9780094.html
Copyright © 2011-2022 走看看