zoukankan      html  css  js  c++  java
  • myod od -tx -tc功能的c语言实现1210

     一、实验要求

     1. 复习c文件处理内容;

     2. 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能;

     3. main与其他分开,制作静态库和动态库;

     4. 编写Makefile;

     5. 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息。

    二、实验准备

    本次实验要完成的是对od -tx -tc的c代码实现

    它们的主要功能是对文件进行16进制和ascii码的输出,功能同od -tc -tx(只是输出顺序的不同)

    由此本次实验我们需要完成的目标就变成了分别对字符串进行16进制和ascii码输出(这用的是"%d"和"%x"强制转换输出),其中难点在于判断文件是否读完(如下代码使用的是EOF判断)。

    三、实验代码

    head.h//头文件
    
    #ifndef HEAD_H
    #define HEAD_H
    void od(char STR[],int);
    #endif
    
    myod.c//main函数功能
    
    #include<string.h>
    int main()
    {
    
    FILE *fp;
    fp=fopen("test.txt","rb");//此处输入待转换的txt文件
        char ch;
        char STR[1000];
        int i,n;
        i=0;
        while((ch=fgetc(fp))!=EOF)
        {
            STR[i]=ch;
            i++;
        }
        STR[i]='';
        fclose(fp);
        oput(STR,i);
    }
    
    oput.c//输出函数
    
    #include"head.h"
    #include<stdio.h>
    #include<stdlib.h>
    #include<string.h>
    void od(char STR[1000],int i)
    {
    int k=1;
    int j=0;
    int m=0;
    int line=0;
    printf("%06d  ",line);
    putchar(STR[0]);
    for(k=1;k<=i;k++){
    if(k%16!=0&&STR[k]!=''){
    if(STR[k]!='
    ')
    {
    printf("  %2c",STR[k]);
    continue;
    }
    else{
    printf("  \n");
    continue;
    }
    }
    else{
    printf("
          ");
    for(j=m;j<k;j++){
    printf("  %02x",STR[j]);
    }
    printf("
    %06d",k+2);
    
    m=k;
    }
    }
    printf("
    ");
    }

    四、测试代码

    为测试如上代码,首先我们需要一个待转换的txt文件,这里新建了一个test.txt,其中内容为字符串“sunnyday20181210

     测试结果如下:

     五、完成静态库,动态库的生成

    静态库:

    动态库:

     

    六、制作makefile

    运行结果:

     七、实验体会

    1、更改待转换的文件需要修改源代码内容,待改进。

    2、在制作动态库的时候遇到了无法生成可执行文件的问题,分析原因后可能是未复制文件(命令行打错,已解决)

    3、虽然本次实验中采用的是我们较为熟悉的c语言编程,但是在编写过程中还是遇到了一些磕绊,算是对文件类型的一次复习。同时也对静态库,动态库以及makefile的编写有了更深刻的体会。

  • 相关阅读:
    如何将网格式报表打印成其它样式
    拥有与实力不相称的脾气是种灾难——北漂18年(23)
    8.8.1 Optimizing Queries with EXPLAIN
    mysql 没有rowid 怎么实现根据rowid回表呢?
    secondary index
    8.5.5 Bulk Data Loading for InnoDB Tables 批量数据加载
    mysql 中key 指的是索引
    8.5.4 Optimizing InnoDB Redo Logging 优化InnoDB Redo 日志
    8.5.3 Optimizing InnoDB Read-Only Transactions 优化InnoDB 只读事务
    8.5.1 Optimizing Storage Layout for InnoDB Tables InnoDB表的存储布局优化
  • 原文地址:https://www.cnblogs.com/you-knows/p/13799600.html
Copyright © 2011-2022 走看看