• 首先根据od要输出16进制的功能,以及c语言中文件的打开读取等函数,编写了如下代码。
#include<stdio.h>
#define N 1000
int main()
{
int count1=0,count2=0,number=0;
FILE *fp1;
char model[N],name[N];
char str;
printf("name:");
scanf("%s",&name);
if((fp1=fopen(name,"r"))==NULL)
{
printf("ERROR");
exit(0);
}
while(fgets(model,N,fp1))
{
while(model[number]!='\0')
number++;
while(1)
{
printf("%c\t",model[count1]); if((count1+1)%16==0||model[count1+1]=='\0')
{
printf("\n");
while(1)
{
printf("%x\t",model[count2]);
count2++;
if(count2%16==0||model[count2]=='\0')
{
printf("\n");
break;
}
}
}
count1++;
if(model[count1]=='\0') break;
}
}
fclose(fp1);
return 0;
}
  • 结果出现了很多问题,如果文本文件中只有一行文字可以实现,如果多输入几个回车就会出现很大的错误。

  • 对比Linux下的od命令有明显错误。

  • 询问结对同学张瑞琦(20155230)开始解决问题。

  • 重新编写代码将其分成主函数:打开文件、读取文件、输出文件内容、关闭文件。fx函数:将文件内容按16进制输出。

  • 修改之后不能输出\n,添加代码

if(ch=='\n')
printf(" \\n");
  • 输出没有以16字节换行 ,添加代码
count++;
if(count==16)
{
printf("\n");
count=0;
}
  • \n不能转化为16进制的0a,之间编写代码fx函数中如果遇到\n输出0a

  • 最后的成品代码如下

void main(){

    char a[50];
printf("od -tx -tc ");
scanf("%s",a);
FILE *fp;
char ch;
fp=fopen(a,"r");
ch=fgetc(fp);
printf("原文件输出为:\n");
int count=0;
while(ch!=EOF)
{
if(ch=='\n')
printf(" \\n");
else
printf("%4c",ch);
count++;
if(count==16)
{
printf("\n");
count=0;
}
ch=fgetc(fp);
} printf("\n");
tx(a);
}
void tx(char *a)
{
FILE *fp;
char ch;
printf("16进制输出为:\n");
fp=fopen(a,"r");
ch=fgetc(fp);
int count=0;
while(ch!=EOF)
{
if(ch=='\n')
printf(" 0a");
else
printf("%4x",ch);
count++;
if(count==16)
{
printf("\n");
count=0;
}
ch=fgetc(fp);
}
fclose(fp);
}

git结果:

参考资料

  • 由于c语言文件基础较差,学习了有关文件的c语言函数。

  • 参考网上资料

  • 摘取比较常用的函数如下

  • fopen 函数说明:

    作用:用来打开一个文件

    格式:FILE * fopen(const char * path,const char * mode);

    返回值:打开文件成功返回一个文件指针,若打开文件失败则返回NULL

  • fclose 函数说明:

    作用:关闭一个文件流,释放文件指针

    格式:int fclose( FILE *fp );

    返回值:如果流成功关闭,fclose 返回 0,否则返回EOF

  • fgetc 函数说明:

    作用:从文件指针指向的文件流中读取一个字符,读取一个字节后,光标位置后移一个字节

    格式:int fgetc(FILE *stream);

    返回值:返回所读取的一个字节,如果读到文件末尾或者读取出错时返回EOF(EOF是文件结束标识符,一般值为-1)

  • fputc 函数说明:

    作用:将指定字符写到文件指针所指向的文件的当前写指针位置上

    格式:int fputc (char c, File *fp);

    返回值:在正常调用情况下,函数返回写入文件的字符的ASCII码值,出错时,返回EOF

  • fgets 函数说明:

作用:从文件结构体指针stream中读取数据,每次读取一行。读取的数据保存在buf指向的字符数组中,每次最多读取bufsize-1个字符(第bufsize个字符赋'\0'),如果文件中的该行,不足bufsize个字符,则读完该行就结束。如若该行(包括最后一个换行符)的字符数超过bufsize-1,则fgets只返回一个不完整的行,但是,缓冲区总是以NULL字符结尾,对fgets的下一次调用会继续读该行。

格式:char *fgets(char *buf, int bufsize, FILE *stream);

返回值:函数成功将返回buf,失败或读到文件结尾返回NULL。因此我们不能直接通过fgets的返回值来判断函数是否是出错而终止的,应该借助feof函数或者ferror函数来判断。

Linux下c语言实现myod的更多相关文章

  1. 20155322 2017-2018-1《信息安全系统设计》第二周 课堂测试 Linux下C语言实现MYOD

    20155322 2017-2018-1<信息安全系统设计>第二周 课堂测试 Linux下C语言实现MYOD [博客目录] 静态库测试 实现方法 相关资料 操作 动态库测试 实现方法 相关 ...

  2. linux 下C语言学习路线

    UNIX/Linux下C语言的学习路线.一.工具篇“公欲善其事,必先利其器”.编程是一门实践性很强的工作,在你以后的学习或工作中,你将常常会与以下工具打交道, 下面列出学习C语言编程常常用到的软件和工 ...

  3. Linux下C语言编程实现spwd函数

    Linux下C语言编程实现spwd函数 介绍 spwd函数 功能:显示当前目录路径 实现:通过编译执行该代码,可在终端中输出当前路径 代码实现 代码链接 代码托管链接:spwd.c 所需结构体.函数. ...

  4. Linux基础与Linux下C语言编程基础

    Linux基础 1 Linux命令 如果使用GUI,Linux和Windows没有什么区别.Linux学习应用的一个特点是通过命令行进行使用. 登录Linux后,我们就可以在#或$符后面去输入命令,有 ...

  5. LINUX下C语言编程基础

    实验二 Linux下C语言编程基础 一.实验目的 1. 熟悉Linux系统下的开发环境 2. 熟悉vi的基本操作 3. 熟悉gcc编译器的基本原理 4. 熟练使用gcc编译器的常用选项 5 .熟练使用 ...

  6. LINUX下中文语言包的安装(转)

    在安装盘上已经有各种语言包了,我们只需要找到他们,并安装就可以了.中文的是fonts-chinese-3.02-9.6.el5.noarch.rpmfonts-ISO8859-2-75dpi-1.0- ...

  7. Unix和Linux下C语言学习指南

    转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...

  8. 笔记整理——Linux下C语言正则表达式

    Linux下C语言正则表达式使用详解 - Google Chrome (2013/5/2 16:40:37) Linux下C语言正则表达式使用详解 2012年6月6日Neal627 views发表评论 ...

  9. linux下常用语言的语法检查插件整理

    linux下常用语言的语法检查插件 可以结合vim语法检查插件syntastic使用,具体请参考syntastic使用说明 如php,sql,json,css,js,html,shell,c等语法插件 ...

随机推荐

  1. December 23rd 2016 Week 52nd Friday

    Life is a horse, and either you ride it or it rides you. 人生像一匹马,你不驾驭它,它便驾驭你. It is the same meaning ...

  2. FOR YOU

    给你 作者:余秀华 一家朴素的茶馆, 面前目光朴素的你皆为我喜欢 你的胡子,昨夜辗转的面色让我忧伤 我想带给你的,一路已经丢失得差不多 除了窗外凋谢的春色 遇见你以后,你不停地爱别人,一个接一个 我没 ...

  3. 中石油大学统考(大学英语B)押题笔记

    二. 词汇与结构 1. I will.意为“我会的”,固定搭配. 2. get tired of 是词组“对…厌烦了”的意思. 3. — ________ is your girl friend li ...

  4. strerror的坑

    最近写的一段代码,总是出core,精简了一下,稳定复现. #include <stdio.h> #include <errno.h> int main() { printf(& ...

  5. 简析Chrome和Webkit的渊源

    http://www.3lian.com/edu/2012/05-25/28803.html 互联网的浪潮从未停息,而用以网上冲浪的冲浪板也一直在变得愈加精良.自人们进入互联网时代以来,即已经发生了三 ...

  6. 2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描

    2018-2019-2 网络对抗技术 20165322 Exp6 信息搜集与漏洞扫描 目录 实验原理 实验内容与步骤 各种搜索技巧的应用 DNS IP注册信息的查询 基本的扫描技术 漏洞扫描 基础问题 ...

  7. OKHttp3学习

    转载 Okhttp3基本使用 基本使用——OkHttp3详细使用教程 一.简介 HTTP是现代应用常用的一种交换数据和媒体的网络方式,高效地使用HTTP能让资源加载更快,节省带宽. OkHttp是一个 ...

  8. nyoi 42(欧拉回路)

    http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=42 一笔画问题 时间限制:3000 ms  |  内存限制:65535 KB 难度:4 描述 ...

  9. 用 S5PV210 学习 Linux (一) 刷机(一)

    简介: 习惯了 用 keil 或者 IAR  一键下载 (烧写) 代码,S5PV210 貌似就不能这么简单用 仿真器的 方式 下载代码了,因此 学习 S5PV210 的第一步就是 学习怎么下载代码,下 ...

  10. 【MySQL】基本语句

    ##mac启动mysql的命令语句## /usr/local/mysql/bin/mysql -u root -p ##然后输入密码 查看当前存在数据库 show databases; 创建数据库 c ...