C primier plus 第十三章 13.2标准I/O
首先,关于main(int argc,char *argv[ ])。参考百度百科中的解释。
https://baike.baidu.com/item/argc%20argv/10826112?fr=aladdin
1. argc的值是命令行参数的个数
什么是命令行参数?
在命令行下调用程序(假设程序名为2.exe)
c:\2.exe file1 file2
这时的“c:\2.exe” “file1” “file2”这三个都是命令行参数
特别注意的是,argc 是指命令行参数变量的个数,包括程序运行时的全路径名,即全路径名也算一个变量!
2. char *argv[ ]: 指针数组,用来存放指向你的字符串参数的指针,每一个元素指向一个参数
argv[0] 指向程序运行的全路径名
argv[1] 指向在DOS命令行中 执行程序名 后的第一个字符串
argv[2] 指向执行程序名后的第二个字符串
......
argv[argc]为NULL。
下面,给出程序清单13.1的运行示意图:
#include<stdio.h>
#include<stdlib.h> //为exit()函数提供原型
int main(int argc,char *argv[]) //启用main()中两个参数的使用
{
int ch; //存放字符
FILE *fp; //文件指针
long count=0; //记录字符个数
if(argc!=2) //为什么是!=2,路径名算一个变量参数,文件名字算一个变量参数!!!
{
printf("Usage: %s filename\n",argv[0]);
exit(1);
}
if((fp=fopen(argv[1],"r"))==NULL) //fopen()函数有两个参数。第一个参数argv[1]是要打开的
//文件名字,更确切地说,是该文件名的字符串的地址。
//第二个参数是指定文件打开模式(参考表13.1).
{
printf("Can't open %s\n",argv[1]);
exit(1);
}
while((ch=getc(fp))!=EOF)
{
putc(ch,stdout);
count++;
}
printf("\n");
if(fclose(fp)!=0)
printf("Error in closeing file %s\n",argv[1]);
printf("File %s has %ld characters\n",argv[1],count);
return 0;
}
开始编译,完成后找到count.exe这个文件;创造一个文本文件file.txt。
特别注意,两文件必须在同一个文件夹里面!
打开cmd窗口。
1.文件直接放在F盘。
输入完毕后按下Enter键即可。
2.文件放在F盘的文件里面,如B文件夹。
特别注意在cmd中要访问文件夹,记得cd +文件夹。