输入参数是_

问题描述 投票:0回答:3

我想知道为什么结果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;
}
c command-line-arguments startup argv argc
3个回答
2
投票

从标准(C11)开始,特别注意粗体:

如果已声明,则主函数的参数应遵循以下规定约束:

  • argc的值应为非负数。
  • argv[argc]应为空指针。
  • 如果argc的值大于零,则数组成员argv[0]至[包含] argv[argc-1]应包含指向字符串的指针程序启动之前,主机环境由实现定义的值。的目的是向程序提供在程序启动之前确定的信息来自托管环境中的其他位置。如果主机环境不具备提供带有大小写字母的字符串,实现应确保字符串以小写形式接收。
  • 如果argc的值大于零,则由argv[0]指向的字符串代表程序名称;如果argv[0][0]为空字符,则程序名称在主机环境中不可用。如果argc的值是大于1时,由argv[1]argv[argc-1]指向的字符串代表程序参数。
  • 参数argcargv以及由argv数组指向的字符串应可由程序修改,并在程序之间保留其最后存储的值启动和程序终止。

换句话说,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

0
投票

../ a.out是第一个参数,所以这就是argcount等于1的原因。


0
投票

从C标准(5.1.2.2.1程序启动。第2页)

—如果argc的值大于零,则由指向的字符串argv [0]表示程序名称; argv [0] [0]为null如果程序名称不能从主机获得,则为字符环境。

因此,您所使用的环境在第一个参数中提供了程序名称。

© www.soinside.com 2019 - 2024. All rights reserved.