一个简单的文件压缩程序——在cmd窗口的实现。

在C primier plus 13.3章节中,介绍了一个简单压缩程序,代码如下:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define LEN 40

int main(int argc,char *argv[])
{
	FILE *in,*out;
	int ch;                  //字符存储位置,为什么是int ch,而不是char ch?
	char name[LEN];          //getc(stdin)相当于getchar(),函数在返回一个字符时,会将
	int count=0;
                             //char或unsigned char类型转换为int型。
	if(argc!=2)              //因为char或unsigned char取值范围是-128~127或0~255,无法正常
	{                        //区分返回的字符与EOF(-1)。
		fprintf(stderr,"Usage: %s filename\n",argv[0]);
		exit(1);
	}

	if((in=fopen(argv[1],"r"))==NULL)
	{
		fprintf(stderr,"I couldn't open the file\"%s\"\n",argv[1]);
		exit(2);
	}

	strcpy(name,"eddy");//源代码是strcpy(name,argv[1]);strcat(name,".red");
	strcat(name,".txt");

	if((out=fopen(name,"w"))==NULL)
	{
		fprintf(stderr,"Can't create output file.\n");
		exit(3);
	}

	while((ch=getc(in))!=EOF)//核心程序
		if(count++ % 3 ==0) //打印每三个字符中的第三个!
			putc(ch,out);    //注意,count++,是先用再加!!!!

	if(fclose(in)!=0 || fclose(out)!=0)
		fprintf(stderr,"Error in closing files.\n");

	return 0;
}

如果按照书上源码实现,出现的文件有可能在系统上面显示不出文件。

在cmd中运行代码如下,

得到一个新文件:eddy.txt.red

此时文件有可能在系统中打不开来。

使用新代码:    strcpy(name,"eddy");
                          strcat(name,".txt");

此时注意把源文件(即要复制的文件改为除了eddy外的任意名字,如果是重名,会导致输出结果为空白。)

我把源文件改为eddy1.txt。

cmd窗口运行命令行为:

此时文件就多了eddy.txt的标准文档文件!

总结,了解argc,argv的运行机制,就可以明白为什么会出现eddy.txt.red文件名的文档了。回看C primier plus 第十三章 13.2标准I/O

猜你喜欢

转载自blog.csdn.net/LPJLBJ/article/details/83352246
今日推荐