20191317王鹏宇MyOD
Linux MyOD
实践内容:MyOD:
代码:
20191317wpy.h
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
#define INPUT_FILE "20191317wpy.txt"
void myod(char transform[],int num);
main.c
#include "20191317wpy.h"
int main()
{
char transform[1000]={0};
char filename[128]={0};
int num = 0;
int n=0;
char c;
FILE *fp;
/*printf("file name: \n");
scanf("%s",&filename); */
fp = fopen(INPUT_FILE,"r");
fread(transform,1000,sizeof(char),fp);
while (transform[n]!=0)
{
num++;
n++;
}
printf("%d",num);
myod(transform,num);
return 0;
}
myod.c
#include "20191317wpy.h"
void myod(char transform[],int num)
{
int count_1 = 0;
int count_2 = 0;
int i = 0;
int flag = 0;
int m = 1;
int judge = 1;
char tmp[3];
while (1)
{
printf("%07o",count_1);
printf(" ");
for ( count_2 = 0; count_2 < 4; count_2++)
{
for (i = 3; i >= 0 ; i--)
{
tmp[i] = transform[m*4-1-i];
}
for ( i = 0; i <= 3; i++)
{
printf("%02x",tmp[i]);
if (tmp[i] == 0)
{
flag = 1;
}
else if (flag == 1 && i == 3)
{
judge++;
printf("\n");
printf(" ");
for ( i = count_1; i < num+1; i++)
{
printf("%c ",transform[i]);
}
printf("\\n");
printf("\n");
printf("%07o\n",num);
return;
}
}
printf(" ");
m++;
}
printf("\n");
printf(" ");
for ( i = count_1; i < count_1+16; i++)
{
printf("%c ",transform[i]);
}
printf("\n");
count_1=count_1+16;
}
}
动态库制作Makefile
Makefile
main2: libmymath.so include/20191317wpy.h
gcc src/main.c -o bin/main2 -I/home/wpy/桌面/testmyod/include -Llib -lmymath
libmymath.so: myod2.o
gcc -shared -o lib/libmymath.so lib/myod2.o
myod2.o: src/myod.c include/20191317wpy.h
gcc -fPIC -c src/myod.c -I/home/wpy/桌面/testmyod/include -o lib/myod2.o
clear:
rm lib/*.o
start:
export LD_LIBRARY_PATH=lib
bin/main2
静态库制作makefile
main: libtestmath.a include/20191317wpy.h
gcc src/main.c -o bin/main -I/home/wpy/桌面/testmyod/include -Llib -ltestmath
libtestmath.a: myod.o
ar rcvs -o lib/libtestmath.a lib/myod.o
myod.o: src/myod.c include/20191317wpy.h
gcc -c src/myod.c -I/home/wpy/桌面/testmyod/include -o lib/myod.o
clear:
rm lib/*.o
start:
bin/main
实践截图:
可以从输出结果看出,od -tx -tc 20191317.txt
指令与我的make指令输出结果并没有明显差异,几乎完全相同。下图是20191317.txt文件的内容:
实践内容:静态库制作:
主要指令有:
gcc -c src/myod.c -I/home/wpy/桌面/testmyod/include -o lib/myod.o
ar rcvs -o lib/libtestmath.a lib/myod.o
gcc src/main.c -o bin/main -I/home/wpy/桌面/testmyod/include -Llib -ltestmath
实践截图:
动态库制作:
主要指令:
gcc -fPIC -c src/myod.c -I/home/wpy/桌面/testmyod/include -o lib/myod2.o
gcc -shared -o lib/libmymath.so lib/myod2.o
gcc src/main.c -o bin/main -I/home/wpy/桌面/testmyod/include -Llib -ltestmath
实践截图:
遇到问题::
主要是在编写myod代码是遇到较多问题,如果不参考他人的代码,自己从零开始写还是比较困难,以后还是需要多加练习这一薄弱环节。其中问题比较严重的有,缓冲区溢出,这是在将文本文件中的字符提取到字符串数组中遇到的,修改了一下提取字符的代码才解决,还有就是如何打印一行16进制转化结果,隔一行ascii码,这里我采取的是利用printf可以直接打印16进制字符不用转换的方法,取了个巧,但是也算解决了这个问题。还有就是openeuler系统中安装中文环境,实在是太麻烦,在安装fcitx输入法时,各种依赖缺失,安装完一个又会提醒另一个,套来套去就是无法安装成功,所以最终我还是放弃了在openeuler系统中输出中文的方法。毕竟不是很需要在虚拟机中输出中文。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?