MyOD

任务详情

1.复习c文件处理内容

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

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

4.编写Makefile

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

使用od -tx -tc test.txt输出结果

  • 由开始的截图我们可以知道,每行只输出16个字符,在这16个字符的下方打印相应的ASCII码,每行的开头对应该行字符个数的8位8进制数。
    另外,观察到全部输出完毕后总是会输出一个' '。

静态库创建:

动态库创建:

程序运行结果:

代码实现:

main.c:

#include <stdio.h>

#include <stdlib.h>

#include "head.h"

#define N 1000

#define M 17

int main(char argv[])

{

FILE *fp;

char args[N],name[N],ch;

int i=0;

printf("please input file name:");

scanf("%s",name);

//name=argv;

if((fp=fopen(name,"r"))==NULL)

{

printf("ERROR!");

exit(0);

}

while(fgets(args,17,fp))

{

tx(args,i++);

tc(args);

}

fclose(fp);

}

tx.c

void tx(char args[],int j)

{

int i;

char output[N];

printf("%07o",16*j);

j++;

for(i=0;args[i]!='';i++)

{

if(args[i]==' ')

output[i]=' ';

else

output[i]=args[i];

}

for(i=0;args[i]!='';i=i+4)

{

printf(" %x%x%x%x",output[i+3],output[i+2],output[i+1],output[i]);

}

printf(" ");

}

tc.c

#include<stdio.h>

#include "head.h"

void tc(char args[])

{

int i;

printf(" ");

for(i=0;args[i]!='';i++)

{

if(args[i]==' ')

printf("\n");

else

printf("%4c",args[i]);

}

printf(" ");

}

head.h

#ifndef _HEAD_20191306_H_

#define _HEAD_20191306_H_

void tc(char args[]);

void tx(char args[],int j);

#endif

编程中遇到的问题和解决

问题一:一开始并没有注意到输出全部字符后需要输出一个“ ”符号,到最后才想起来,但是要改代码又要全部都改很麻烦
问题一解决:翻找课本后发现随机流是可以调用lenth()方法来直接获得一个文件里面的字符个数的,所以“投机取巧”,在开头建了个随机流来获得文件中的字符个数,最后和已经输出的字符个数做比较,相等时打印“ ”以及对应的两位16进制ASCII码。

原文地址:https://www.cnblogs.com/1208499954qzone/p/15339258.html