课堂实践
静态库的测试
- 要求
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.a静态库?main.c如何使用mymath.a?
- 提交静态库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
- 我的截图
- 知识点
gcc -c 要封装的函数.c
ar rcs 名1.a 要封装的函数.c
gcc -c main.c
gcc -static -o 名2 main.o ./名1.a
共享库
- 要求
- 除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main.c如何使用mymath.so?
- 提交共享库生成和调用过程截图(一定包含条件断点的),要全屏,包含自己的学号信息
- 截图
- 知识点
gcc -shared -fpic -o 名.so 要封装函数.c
gcc -o 名 main.c ./名.so
Makefile
- 要求
1 写出编译上面vi编辑代码的makefile,编译出来的目标文件为testmymath, 只用显式规则就可以.
2 提交Make过程截图,要全屏,包含自己的学号信息
- 截图
- 知识点
testmymath: main.c add20155325.c sub20155325.c mul20155325.c div20155325.c
gcc -Og -o testmymymath main.c add20155325.c sub20155325.c mul20155325.c div20155325.c
myod
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void One(int LJ,int tx[],char tx2[]);
char Change(int t);
void TX(int H,int tx[]);
void main(int argc,char *argv[])
{
FILE *fp;
if((fp = fopen(argv[4],"r")) == NULL)
{
printf(" *** 文件打开失败***");
exit(0);
}
if(strcmp(argv[1],"od")==0)
{
if(strcmp(argv[2],"-tc")==0)
{
if(strcmp(argv[3],"-tx1")==0)
{
char str[1000];
int num,i,j,i2;
int LJ,SY;
int tx[8];
char tx2[8];
int tSY,Dan;
for(num=0;num<strlen(str);num++)str[num]='0';
num = 0;
while((str[num]=getc(fp))!=EOF){num++;}
for(LJ=0,SY=num;;)
{
for(j=0;j<8;j++)tx[j] = 0;
One(LJ,tx,tx2);
for(j=0;j<8;j++)printf("%c",tx2[j]);
printf(" ");
tSY = SY;
if(tSY>=16)Dan = 16;
else Dan = tSY;
for(j=LJ;j<Dan+LJ;j++)
{
if(str[j]=='\n')printf("\\n ");
else printf("%c \t",str[j]);
}
printf("\n");
int tt;
printf(" ");
for(j=LJ;j<Dan+LJ;j++)
{
tt = str[j];
One(tt,tx,tx2);
for(i2=0;i2<8;i2++)
{
if(tx2[i2]!='0') printf("%c",tx2[i2]);
}
printf(" \t");
}
printf("\n");
tSY =tSY-Dan;
if(SY>=16)LJ = LJ+16;
else if((SY>0)&&(SY<16))LJ = LJ+SY;
else if(SY==0)break;
SY = num-LJ;
}
}
}
}
else printf("指令输入错误\n");
fclose(fp);
}
void One(int LJ,int tx[],char tx2[])
char Change(int t);
{
TX(LJ,tx);
int i;
for(i=0;i<8;i++)tx2[i] = Change(tx[i]);
}
char Change(int t)
{
if((t>=0)&&(t<10))return t+48;
else return t+87;
}
void TX(int H,int tx[])
{
if(H>536870911)
{
printf("字符数太大,超出限制\n");
exit(0);
}
int i = 7;
for(;i>0;)
{
tx[i] = H%16;
H = H/16;
i--;
}
}
问题
- getc和fgetc的区别
- 解决:fgetc() 与getc()有什么区别呢?
推代码时出问题
- 解决:
- 尝试过:git config -–global user.name "xxx"
git config –-global user.email "xxx@xxx.com"
无效
然后我重新登录一下我的码云,发现原来的密码居然登不上去了,修改了密码之后,再推就能推上去了。感想
重新配置过虚拟机等,走完所有流程,我会在之后的博客中将详情记录下来。
本觉得Myod简单,结果处理了很久的bug,保持微笑。