首页 > 解决方案 > 什么是输入参数是_

问题描述

我想知道为什么没有参数的结果是 1。

int main(int argcount, char *arglist[]) {
    int i;
    printf("Number of arguments %d\n",argcount);
    printf("Arguments list:\n");
    for (int i=0;i<argcount;i++)
        printf("%s\n",arglist[i]);
    return EXIT_SUCCESS;
}

标签: ccommand-line-argumentsstartupargvargc

解决方案


从标准(C11)中,特别注意粗体位:

如果它们被声明,主函数的参数应遵守以下约束:

  • 的值argc应为非负数。
  • argv[argc]应为空指针。
  • 如果 的值argc大于零,则argv[0]通过 argv[argc-1]inclusive 的数组成员应包含指向字符串的指针,这些指针在程序启动之前由宿主环境赋予实现定义的值。目的是从托管环境中的其他地方向程序提供在程序启动之前确定的信息。如果主机环境不能提供大写和小写字母的字符串,则实现应确保以小写形式接收字符串。
  • 如果 的值argc大于零,则 指向的字符串argv[0] 代表程序名;argv[0][0]如果程序名在宿主环境中不可用,则应为空字符。如果 的值argc大于 1,则argv[1]through指向的字符串argv[argc-1] 表示程序参数。
  • 数组所指向的参数argc和字符串应可由程序修改,并在程序启动和程序终止之间保留其最后存储的值。argvargv

换句话说,argc包括表示程序名称的参数 - 程序的实际参数从argv[1]. 根据以下脚本,从程序输出中可以明显看出这一点,其中第一个参数是程序名称:

pax> cat testprog.c
#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("Argument count: %d\n", argc);
    printf("Arguments:\n");
    for (int i = 0; i < argc; i++)
        printf("   %s\n", argv[i]);
    return 0;
}

pax> gcc --std=c11 -o testprog testprog.c && ./testprog 1 2 3
Argument count: 4
Arguments:
   ./testprog
   1
   2
   3

pax> ./testprog
Argument count: 1
Arguments:
   ./testprog

推荐阅读