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]='\0';
    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]!='\0'){
if(STR[k]!='\n')
{
printf("  %2c",STR[k]);
continue;
}
else{
printf("  \\n");
continue;
}
}
else{
printf("\n      ");
for(j=m;j<k;j++){
printf("  %02x",STR[j]);
}
printf("\n%06d",k+2);

m=k;
}
}
printf("\n");
}

四、测试代码

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

 测试结果如下:

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

静态库:

动态库:

 

 

 

 

六、制作makefile

运行结果:

 

 

 七、实验体会

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

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

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

posted @ 2020-10-11 21:52  Amyonelse  阅读(201)  评论(0编辑  收藏  举报