zoukankan      html  css  js  c++  java
  • MyOD(选作,计入平时成绩)

    Myod的制作

    源代码

    myod.c

    #include "myod.h"
    #include <stdio.h>
    int main(int argc,char *argv[])
    { 
     // puts(argv[1]);
      FILE *FP;
      char ch;
      FP=fopen(argv[1],"r+");
      ch=fgetc(FP);
      printf("output the content:
    ");
       while(ch!=EOF)
      {
         if(ch=='
    ')
        	printf("
    ");
         else
        	printf("%4c",ch);
        	ch=fgetc(FP);
      }
       fclose(FP);
      ascii(argv[1]);
      hex(argv[1]);
      return 0;
    }
    

    ascii.c

    #include "myod.h"
    #include <stdio.h>
    int ascii(char *textname)
    {
      FILE *fp;
      char c;
        fp=fopen(textname,"r+");
        c=fgetc(fp);
      printf("output the ascii:
    ");
    
      while(c!=EOF)
      {
         if(c=='
    ')
            printf("
    ");
         else
            printf("%4d",c);
            c=fgetc(fp);
      }
      fclose(fp);
    return 0;
    }
    

    hex.c

    #include <stdio.h>
    int hex(char *textname)
    {
      FILE *fp;
      char c;
      printf("output the hex:
    ");
      fp=fopen(textname,"r+");
      c=fgetc(fp);
      while(c!=EOF)
      {
        if(c=='
    ')
        printf("
    ");
        else
        printf("%4x",c);
        c=fgetc(fp);
       }
       fclose(fp);
       return 0;
    }
    

    makefile

    MYOD:myod.o ascii.o hex.o
    	gcc *.o -o MYOD
    myod.o:myod.c
    	gcc -c myod.c
    ascii.o:ascii.c
    	gcc -c ascii.c
    hex.o:hex.c
    	gcc -c hex.c
    clean:
    	rm *.o
    

    运行截图

    测试makefile

    静态库

    gcc -c ascii.c hex.c 
    ar rcs libmyodlib.a ascii.o hex.o
    gcc myod.c -L. -lmyodlib -o MYOD
    MYOD "20191204lhp.txt" 
    

    动态库

    gcc ascii.c hex.c -fPIC -shared -o libmyodlib.so 
    gcc myod.c -L. -lmyodlib -o MYOD
    export LD_LIBRARY_PATH=.
    MYOD "20191204lhp.txt" 
    
    

    重点遇到的问题

    问题1:在编写代码是,初始文件名是通过scanf()函数从输出入端输入的,在输入时总是出现输错的情况十分的不方便。
    解决办法:在搜索后发现了argc和argv【】:
    void main(int argc,char *argv[])
    argv[]:表示的是一个指针数组,一共有argc个元素,其中存放的是指向每一个参数的指针。

    argc:参数个数
    使用argv传入参数时可以使用tab补全文件名,可以避免大部分的输入错误,并且十分快捷。

    引用链接:https://www.cnblogs.com/bestluna/p/wx-moonlightile.html

    问题2:在测试输出结果时发现
    od -tx -tc filename
    的输出结果与自己的输出结果不太相同
    od -tx1 -tc filename
    的输出结果才与自己一致。

    解决办法:多次观察后发现,-tx的每四个数字与我编写的代码输出恰好顺序相反,结合机组的知识发现,Linux的存储是按照小端的方式存储,于是才出现了上图的结果。

  • 相关阅读:
    Linux Centos7安装mongodb并设置开机启动
    解决Centos7下载慢的问题
    用Python处理HTML转义字符的5种方式
    java 利用poi对Excel解析读取和写入,解析resources下的.json文件
    feign.FeignException: status 404 reading DeptClientService#findAll()
    java中进程与线程的区别
    java中sigar获取信息
    Cesium 4490 解决方案
    Windows Server自动化部署Sysprep
    关于SET ANSI_PADDING的作用
  • 原文地址:https://www.cnblogs.com/lhpshuaibi/p/15339632.html
Copyright © 2011-2022 走看看