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的编写有了更深刻的体会。