通过编写c语言程序,运行时实现打印另一个程序的源代码和行号

2017年6月1日程序编写说明:

1.实现行号的打印,实现代码的读取和输出,理解主函数中的参数含义。

2.对fgets函数理解不够

3.对return(1); return 0的含义理解不够

4.未实现页码的打印

 1 /*************************************************************************
 2     > File Name: my_print_program.c
 3     > Author: Mr.Yang
 4     > Purpose:自己编写程序实现打印一个程序的源代码和行号(即运行./my_print_program my_print_program.c即可打印源代码和行号,实现
 5                           功能和Linux中cat my_print_program.c功能类似)
 6     > Created Time: 2017年06月01日 星期四 15时38分33秒
 7  ************************************************************************/
 8
 9 #include <stdio.h>
10 #include <stdlib.h>
11
12 /*实现从命令行读取可执行程序的路径和相关参数*/
13 int main(int argc,char *argv[])
14 {
15         char buffer[256];
16         FILE *fp;
17
18         /*进行argc判断*/
19         if(argc < 2)
20         {
21                 puts("\n请按照标准命令输入,例如:\"./my_print_program test.c\",其中test.c为你需要打印的源代码!\n");
22                 return(1);//思考return (1) return 0有什么区别,它们实现的意义是什么?此处用return (1)可以实现程序执行if语句时不报段错误
23         }
24
25         /*打开代码文件*/
26         fp = fopen(argv[1],"r");
27
28         /*读取源代码*/
29         int line = 1;
30
31         /*思考为什么fgets中中间参数为256,使用其它值可否,它代表着什么实际的意义?*/
32         while(fgets(buffer,256,fp) != NULL)
33         {
34                 /*调试能打印*/
35                 //puts("1");
36                 fprintf(stdout,"%4d:%s",line++,buffer);
37         }
38
39         fclose(fp);
40
41         return 0;
42 }

执行结果如下:

时间: 2024-10-13 08:11:50

通过编写c语言程序,运行时实现打印另一个程序的源代码和行号的相关文章

在程序运行过程中启用另一个程序

有3个函数可以使用:WinExec.ShellExecute.CreateProcess 1.WinExec 这个函数最简单,只有两个参数,原型如下: UINT WinExec( LPCSTR lpCmdLine, UINT uCmdShow ); lpCmdLine:指向一个空结束的字符串,串中包含将要执行的应用程序的命令行(文件名加上可选参数). uCmdShow:定义Windows应用程序的窗口如何显示:SW_HIDE.SW_MINIMIZE.SW_RESTORE.SW_SHOW.SW_S

程序运行时三种内存分配策略

按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完全未

解决异常:公共语言运行时检测到无效的程序

我碰到这个问题比较奇怪,在开发OrayTalk的组织结构功能时,其中的一个方法(基于.NET 2.0)在win7.win2003下运行没有问题,在winxp下运行就抛异常:“公共语言运行时检测到无效的程序”,对应英文为:common language runtime detected an invalid program. 抛异常的方法代码摘抄如下: private Control control = ...; public void ActionOnUI<T1>(bool showMessa

Swift和OC,是编译型语言、解释性语言、运行时语言

首先需要明确的一点是,什么是编译型语言和解释性语言 编译型语言,就是在其执行过程中需要先将其经过编译成机器码来给计算机识别的,其执行效率就会比较高这个是显而易见的,常见比如:C.C++ 而解释型语言,是不用编译这个过程的,只是在执行时通过相应的翻译器(虚拟机)逐行翻译.这样它的跨平台性就会较好,因为可以直接通过编译器编译成需要的平台上的语言,但是有一个问题就是:它每次运行都要讲每行代码逐行解释翻译一遍.常见比如:Python.JS.PHP 由此可见,我们的OC和Swift都是需要先进行编译后才能

VC项目程序运行时设置指定目录读取Dll

方法一: 选择当前工程,右击"Properties" -> "Configuration Properties" -> "Debugging",在"Working Directory"设置dll的路径就可以了 方法二:设置项目的环境变量 方法三: CString strDllPath = GetExePath() + _T("System"); SetDllDirectory(strDllPat

c/c++编译时,指定程序运行时查找的动态链接库路径

http://blog.csdn.net/tsxw24/article/details/10220735 c/c++编译时,指定程序运行时查找的动态链接库路径 分类: c/c++ linux 2013-08-23 14:04 1117人阅读 评论(0) 收藏 举报 [plain] view plaincopy $ g++ -Wl,-rpath,/usr/local/lib/ -oevh libevent_http.cpp -levent -Wl,-rpath,  用于指定程序运行时查找动态链接库

Android程序运行时权限与文件系统权限的区别

apk程序是运行在虚拟机上的,对应的是Android独特的权限机制,只有体现到文件系统上时才使用linux的权限设置. (1)Android中的apk必须签名 (2)基于UserID的进程级别的安全机制  (3)默认apk生成的数据对外是不可见的  (4)AndroidManifest.xml中的显式权限声明  Android程序运行时权限与文件系统权限的区别

Java程序运行时的几个区域

Java运行时涉及到的区域 几个基本概念: 1.Java对象     2.Java方法    3.一个编译好的类,以class文件的形式出现 4.Java的本地方法   5.线程私有和线程共有 一.方法区(永久代) 和 堆(heap) 这两个区域是线程共有的,供所有线程使用.所以,对存放在这两个地方的资源进行操作时,如果是程序是多线程的,那么要考虑同步. 方法区存放的是类的类型信息.类的类型信息有,类的静态变量,其它从class文件中读取到的信息. 当用户访问一个类的静态方法或者类的静态变量,或

获取java程序运行时内存信息

由于最近想自己动手测试一下String和StringBuffer的效率问题,需要获取程序运行时的内存占中信息,于是上网查了一下,根据查到的资料写了个程序,发现结果有问题,才发现查到的资料是错误的.所以在这里跟大家分享一下获取内存占用的正确方法 错误的方法 //程序开始时:(先调用一下垃圾回收,但是不一定立即执行) Runtime.getRuntime().gc(); long initm=Runtime.getRuntime().freeMemory(); //程序结束时: Runtime.ge