MyOD(选做)(20191213兰毅达)
任务详情
- 1 复习c文件处理内容
- 2 编写myod.c 用myod XXX实现Linux下od -tx -tc XXX的功能
- 3 main与其他分开,制作静态库和动态库
- 4 编写Makefile
- 5 提交测试代码和运行结果截图, 提交调试过程截图,要全屏,包含自己的学号信息
- 6 在博客园发表一篇博客,重点写遇到的问题和解决过程
主要功能是对文件进行16进制和ascii码的输出,功能同od -tc -tx相似
主函数代码
#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");
}
int main()
{
FILE *fp;
fp=fopen("yl.txt","rb");
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);
}
For production environments...
npm install --production
NODE_ENV=production node app
运行截图
问题与解决
- 1.调试过程中出现同文件夹下.c文件中的函数无法引用
解决方法:第一种方法是,可以定义一个function.h文件来声明这些函数,接下来,在同一个function.c文件中自定义这个函数,这样的话,如果要在另外一个文件中,如main.c中调用这个函数,只需在程序开头包含相应的头文件就可以实现调用。第二种方法,也是我为了快速调通代码用的就是,直接把函数代码拷贝到要用的myod.c文件中,就不会出现无法引用的问题,但会导致代码过长的问题。 - 2.输出文本对应的十六进制ASCII码时,出现了换行时会少打印一个字母的情况
解决方法:对每一次进行调试,发现是在if语句判断换行的条件有问题,16个一组换行,但这样第16个数就只会打印换行符,导致ASCII码对应出错,然后我就把换行的条件修改了,换行的时候也能打印原字符串和对应的ASCII码。 - 3.修改代码后调用原来的makefile文件结果不变
解决方法:尝试重新写入make test后将文件进行更新,更新后的结果和调试过后的代码结果就保持一致了。另外我还发现,如果对应的.h文件修改了,那么所有依赖这个.h的.o文件都需要重新编译。