文档章节

C Primer Plus 第11章 11.8 命令行参数

idreamo
 idreamo
发布于 2016/08/27 07:02
字数 853
阅读 44
收藏 0

现代的图形界面出现之前是命令行界面。Dos和Unix就是例子。命令行(command line)是在一个命令行环境下,用户输入的用于运行程序的行。假定有一个程序在名为fuss 的文件中,那么在UNIX下运行该程序的命令行如下:

$ fuss

或者在windows命令行模式下,如windows xp命令提示符:

c> fuss

命令行参数(command-line argument)是同一行中的附加项。如下例:

% fuss -r Ginger

一个C程序可以读取这些附加项为自己所用。

C程序通过使用main()的参数读取这些项目。程序清单11.27给出了一个典型的例子。

程序清单11.27  repeat.c程序

/*repeat.c --带有参数的main()函数*/
#include <stdio.h>
int main (int argc,char * argv[])
{
    int count;

    printf("The command line has %d arguments: \n",argc - 1);
    for (count=1;count<argc;count++)
        printf("%d: %s\n",count,argv[count]);
    printf("\n");

    return 0;
}

把这个程序编译为可执行文件repeat;下面是从命令行运行该程序的结果:

c>repeat Resistance is futile
The command line has 3 arguments:
1: Resistance
2: is 
3: futile

C编译器允许main( )没有参数,或者有两个参数(有些实现允许更多的参数,但这将是对标准的扩展)。有两个参数时,第一个参数是命令行中的字符串数按照惯例(但不是必须的),这个int参数被称为argc(代表argument count)。系统使用空格判断一个字符串结束、另一个字符串开始。因此,repeat例子中包括命令名在内有4个字符串,fuss例子有3个。第二个参数是一个指向字符串的指针数组。命令行中的每个字符串被存储到内存中,并且分配一个指针指向它。按照惯例,这个指针数组被称为argv(代表argument value)如果可以(有些操作系统不允许这样做),把程序本身的名字赋值给argv[0]。接着把随后的第一个字符串赋给argv[1]。

回忆一下,printf()的%s说明符需要提供字符串的地址作为参数。每个元素,argv[0],argv[1]正是一个这样的地址。

该形式和有形式参数的其他函数一样。很多程序员使用不同的方式声明argv:

int main (int argc,char **argv)

这种对argv的声明和char *argv[]等价。它意味着argv是一个指向“指向字符的指针”的指针。示例程序中那种形式的效果也一样。它有一个包含几个元素的数组。数组名是指向第一个元素的指针,因此argv指向argv[0],而argv[0]是一个指向字符的指针。因此,即便在原始的定义中,argv仍是一个指向“指向字符的指针”的指针。两种形式都可以用,但我们认为第一种形式更清楚地表明argv代表一系列字符串。

顺便提一下,很多环境(包括UNIX和DOS)允许使用引号把多个单词集中在一个参数里。例如:

repeat "I am hungry" now

这个命令会把字符串 "I am hungry" 分配给argv[1],把字符串"now"分配给argv[2]。

 

© 著作权归作者所有

idreamo
粉丝 18
博文 139
码字总数 224743
作品 0
青岛
产品经理
私信 提问
C Primer Plus 第11章 11.7 ctype.h字符函数和字符串

第7章“C控制语句 分支和跳转”介绍了ctype.h系列字符相关的函数。这些函数不能被 应用于整个字符串,但是可以被应用于字符串中的个别字符。程序清单11.26定义了一个函数,它把toupper( )函数...

idreamo
2016/08/27
52
0
C Primer Plus 第11章 字符串和字符串函数 11.3 字符串输出

11.3.1 puts( )函数 puts( )函数的使用很简单,只需要给出字符串参数的地址。程序清单11.8列出了输出字符串的多种方式。 程序清单11.8 put_out.c程序 输出如下: 注意,每个字符串都单行显示...

idreamo
2016/08/19
20
0
C Primer Plus(5版)第8章编程题1_重定向实现

小伙伴们,对C语言编程有疑问的,可以加微信交流:poo_poo或者扫描我的头像,验证时请注明是“知友” 一、题目描述 本题是第8章编程题的第一道题,题目如下: 二、题目及思路分析 从题述来看...

石家的鱼
2017/07/11
0
0
从零开始UNIX环境高级编程(7):进程环境

0. 引言 在学习进程控制前,先了解进程运行的环境,如:main函数是如何被调用的;命令行参数是如何传递给新程序的;程序在内存空间中是什么样的结构;进程的终止方式等。 1. main函数 1.1 程...

伤口不该结疤
2017/04/24
0
0
C Primer Plus 第11章 11.9 把字符串转换为数字

数字即能以字符串形式也能 以数字形式存储。以字符串形式存储数字就是存储数字字符。例如,数字213即能以数字'2'、‘1’、‘3’、‘0’的形式存储在一个字符串数组中。以数字形式存储213意味...

idreamo
2016/08/29
43
0

没有更多内容

加载失败,请刷新页面

加载更多

shangcheng-my

1.数据库主键、外键类型为bigint,那么在后台应该用什么类型的变量定义? 后台用string接收,因为前段传过来的一般都是json字符串,后台直接接收,mysql是可以吧数字类型的字符串转换为对应的...

榴莲黑芝麻糊
昨天
2
0
微服务架构依赖图

基于spring-cloud-alibaba + dubbo

龙影
昨天
5
0
Centos7 安装zabbix-agent

rpm -i https://repo.zabbix.com/zabbix/4.2/rhel/6/x86_64/zabbix-release-4.2-2.el6.noarch.rpm 可以到https://repo.zabbix.com/zabbix找到对应的版本 yum install zabbix-agent -y 出现E......

abowu
昨天
8
0
文本编辑器GNU nano 4.4 发布

GNU nano 4.4 "Hagelslag" 更新日志: 启动时,光标可以放在第一个或最后一个出现位置 字符串前面带有+/string 或 +?string的字符串。 发生自动硬包装时((--breaklonglines),任何前导引号...

linuxCool
昨天
7
0
你知道字节序吗

字节序 最近在调一个自定义报文的接口时,本来以为挺简单的,发现踩了好几个坑,其中一个比较“刻骨铭心”的问题就是数据的字节序问题。 背景 自定义报文,调用接口,服务端报文解析失败 iO...

杭城小刘
昨天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部