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文件都需要重新编译。
posted @ 2021-09-23 14:46  20191213兰毅达  阅读(28)  评论(0编辑  收藏  举报