文章作者:冰血封情[E.S.T]
信息来源:邪恶八进制 中国
这个程序算是对前面学习进程的一个小总结 原来在Bideyore的指导下 我们探讨了一个可以把源代码文件中的东西逐行读出并且加上行号和页号的小工具
现在我把他改进了一下 一个main()解决 虽然对结构化编程来说这样做是不对滴 不过本来程序就不长么....
实现方法和以前与Bideyore讨论的那个略有不同 不过这个工具在分析程序的时候还是有点小用处的 全当菜鸟学习总结好了:)
使用方法:
引用:
C:\>codeprn
Codez by EvilOctal[E.S.T]
Thanx to Bideyore[E.S.T]
This tool can help you read code by line.
Proper Usage is:
codeprn infile.txt outfile.txt
codeprn infile.txt outfile.txt
假设如果其中 infile.txt 内容如下:
引用:
#include <stdio.h>
#define MAX 4
struct part {
short number;
char name[10];
} data[MAX] = {1, "Smith", 2, "Jones", 3, "Adams", 4, "Wilson"};
struct part *p_part;
int count;
int main(void)
{
p_part = data;
for( count = 0; count < 4; count++)
{
printf("At address %d: %d %s\n", p_part, p_part->number, p_part->name);
p_part++;
}
return 0;
}
那么 生成的 outfile.txt 的内容格式将加上行号:
引用:
1: #include <stdio.h>
2:
3: #define MAX 4
4:
5: struct part {
6: short number;
7: char name[10];
8: } data[MAX] = {1, "Smith", 2, "Jones", 3, "Adams", 4, "Wilson"};
9:
10: struct part *p_part;
11: int count;
12:
13: int main(void)
14: {
15: p_part = data;
16:
17: for( count = 0; count < 4; count++)
18: {
19: printf("At address %d: %d %s\n", p_part, p_part->number, p_part->name);
20: p_part++;
21: }
22:
23: return 0;
24: }
24: //BY E.S.T CodePrn Tools
加上行号 方便阅读 特别是在发帖发程序代码的时候 嘿嘿....
我一共写了两个版本的源代码 第一个是当初学习输入输出写的 另外一个是学习到文件的时候写的:
方法一:2kb
复制内容到剪贴板
代码:
#include <stdio.h>
#include <string.h>
int main( int argv, char *argc[] )
{
char buffer[256];
FILE *fp1, *fp2;
int line = 1, flag = 1;
if( argv != 3 )
{
fprintf(stderr, "\n\tCodez by EvilOctal[E.S.T]\n\tThanx to Bideyore[E.S.T]" );
fprintf(stderr, "\n\tThis tool can help you read code by line." );
fprintf(stderr, "\n\tProper Usage is: " );
fprintf(stderr, "\n\t%s infile.txt outfile.txt\n", argc[0] );
return(1);
}
if (( fp1 = fopen( argc[1], "r" )) == NULL )
{
fprintf( stderr, "Error opening file, %s!", argc[1]);
return(1);
}
if (( fp2 = fopen( argc[2], "w+" )) == NULL )
{
fprintf( stderr, "Error opening file, %s!", argc[2]);
return(1);
}
while( fgets( buffer, 256, fp1 ) != NULL )
{
if( flag )
fprintf( fp2, "%4d:\t%s", line, buffer );
else
fprintf( fp2, "%s", buffer );
if( buffer[strlen(buffer)-1] == '\n' )
line++, flag = 1;
else
flag = 0;
}
fprintf( fp2, "\n%4d:\t//BY E.S.T CodePrn Tools", line);
fclose(fp1);
fclose(fp2);
return 0;
}方法二:1kb
复制内容到剪贴板
代码:
#include <stdio.h>
#include <stdlib.h>
void prnline(FILE *p1, FILE *p2);
int main(int argv, char *argc[])
{
FILE *fp1, *fp2;
if(argv != 3)
{
fprintf(stderr, "\nCodez by EvilOctal[E.S.T]\n" );
fprintf(stderr, "Usage: %s <infile> <outfile>", argc[0]);
exit (0);
}
if((fp1 = fopen(argc[1], "r")) == NULL)
{
fprintf(stderr, "Error open %s!\nPlease chech the file...\n", argc[1]);
exit (0);
}
if ((fp2 = fopen(argc[2], "w")) == NULL)
{
fprintf(stderr, "Error open %s!\nPlease chech the file...\n", argc[2]);
exit (0);
}
prnline(fp1, fp2);
fclose(argc[1]);
fclose(argc[2]);
return 0;
}
void prnline(FILE *p1, FILE *p2)
{
char buffer[256];
int n =0;
while(!feof(p1))
{
n++;
fprintf(p2, "%d: ", n);
fgets(buffer, 256, p1);
fputs(buffer, p2);
}
}附件是方法一的