C语言——命令行参数

命令行参数

参考书 << C Primer Plus >>

  • 在图形界面普及之前都使用命令行界面。DOS和UNIX就是例子。Linux终端提供类UNIX命令行环境。命令行是在命令行环境中,用户为运行程序输入命令的行。假设一个文件中有一个名为fuss的程序。在UNIX环境中运行该程序的命令行是:

    $ fuss
    或者在Windows命令提示模式下是:
    C> fuss
    命令行参数是同一行的附加项。如下例:
    $ fuss -r Ginger
    一个C程序可以读取并使用这些附加项。

  • C编译器允许main()没有参数或者有连个参数(一些实现允许main()有更多的参数,属于对标准的扩展)。main()有两个参数时,第1个参数是命令行中的字符串数量。过去,这个int类型的参数被称为argc(表示参数计数,argument
    count)。系统用空格表示一个字符串的结束和下一个字符串的开始。因此,上面的repeat示例中包括命令名共有4个字符串,其中后3个供repeat使用。该程序把命令行字符串储存在内存中,并把每个字符串的地址储存在指针数组中。而该数组的地址则被储存在main()的第2个参数中。按照惯例,这个指向指针的指针称为argv(表示参数值,argument
    value)。如果系统允许(一些操作系统不允许这样),就把程序本身的名称赋给argv[0],然后把随后的第1个字符串赋给argv[1],依次类推。

  • 顺带一提,许多环境(包括UNIX和DOS)都允许用双引号把多个单词括起来形成一个参数。例如: repeat “I an hungry”
    now 这行命令把字符串“I am hungry”赋给argv[1],把“now”赋给argv[2]。

集成环境中的命令行参数

  • Windows集成环境(如Xcode、Microsoft Visual C++和Embarcadero C++
    Builder)都不用命令行运行程序。有些环境中有项目对话框,为特定项目指定命令行参数。其他环境中,可以在IDE中编译程序,然后打开MS-DOS窗口在命令行模式中运行程序。但是,如果你的系统有一个运行命令行的编译器(如gcc)会更简单。

Macintosh中的命令行参数

  • 如果使用Xcode 4.6(或类似的版本),可以在Product菜单中选择Scheme选项来提供命令行参数,编辑Scheme,运行。然后选择Argument标签,在Launch的Arguments
    Pass中输入参数。
  • 或者进入Mac的Terminal模式和UNIX的命令行环境。然后,可以找到程序可执行代码的目录(UNIX的文件夹),或者下载命令行工具,使用gcc或clang编译程序。
/* count.c -- 使用标准 I/O */
#include <stdio.h>
#include <stdlib.h>  //提供 exit() 的原型

int main(int argc, char *argv[])
{
	int ch;   //读取文件时,储存每个字符的地方
	FILE *fp;   // "文件指针"
	unsigned long count = 0;
	if(argc != 2//没有提供任何参数
	{
		printf(“ Usage: %s filename\n”, argc[0];
		exit(EXIT_FAILURE);
	}
	if((fp = fopen(argv[1],"r"))== NULL{
		printf(“Can‘t open %s\n”,argv[1];
		exit(EXIT_FAILURE);
	}
	while((ch = getc(fp))!= EOF{
		putc(ch,stdout;  //与putchar(ch); 相同
		count++;
	}
	fclose(fp);
	printf(“File %s has %lu characters\n”, argv[1],count);

	returrn 0;
}

应当指出的是,argv[0]存储程序的名称,argv[1]是一个指向第一个命令行参数的指针,*argv[n]是最后一个参数,如果没有提供任何参数,argc将为1,否则,如果传递了一个参数,argc将被设置为2。

  • 2
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值