任务详情
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码。