MyOD编程(选做)

MyOD编程

任务要求

  1. 复习c文件处理内容

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

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

  4. 编写Makefile

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

代码:

myod.c

主要实现读取和关闭文件

    1. #include<stdio.h>
    2. #include<stdlib.h>
    3. #include<string.h>
    4. int main()
    5. {
    6. //char filepath[100];
    7. FILE *fp;
    8. fp=fopen("test.txt","rb");
    9. if(fp==NULL){
    10. printf("Failure to open file\n");
    11. return 0;
    12. }
    13. char ch;
    14. char STR[1000];
    15. int i,n;
    16. i=0;
    17. while((ch=fgetc(fp))!=EOF){
    18. STR[i]=ch;
    19. i++;
    20. //putchar(ch);
    21. }
    22. STR[i]='\0';
    23. //printf("%d",i);
    24. fclose(fp);
    25. od(STR,i);
    26. }

 

od.c

用于实现文件中字符逐个输出以及od -tx -tc 的功能

  1. #include"head.h"
  2. od.c

    用于实现文件中字符逐个输出以及od -tx -tc 的功能

    1. #include"head.h"
    2. #include<stdio.h>
    3. #include<stdlib.h>
    4. #include<string.h>
    5. void od(char STR[1000],int i)
    6. {
    7. int k=1;
    8. int j=0;
    9. int m=0;
    10. int line=0;
    11. printf("%06d ",line);
    12. putchar(STR[0]);
    13. for(k=1;k<=i;k++){
    14. if(k%16!=0&&STR[k]!='\0'){
    15. if(STR[k]!='\n')
    16. {
    17. printf(" %2c",STR[k]);
    18. continue;
    19. }
    20. else{
    21. printf(" \\n");
    22. continue;
    23. }
    24. }
    25. else{
    26. printf("\n ");
    27. for(j=m;j<k;j++){
    28. printf(" %02x",STR[j]);
    29. }
    30. printf("\n%06d",k+2);
    31. m=k;
    32. }
    33. }
    34. printf("\n");
    35. }

 

 需要注意得是要先取消myod.c中对od.c的调用,在myod.c中输出字符,输出文件正常,发现问题出现在od.c中,再在od.c中用cgdb调试,发现是在逐个输出字符的循环中有问题,解决完后能正常输出字符。

posted @ 2021-09-26 21:49  zzy188  阅读(32)  评论(0编辑  收藏  举报