我想知道为什么结果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;
}
从标准(C11)开始,特别注意粗体:
如果已声明,则主函数的参数应遵循以下规定约束:
argc
的值应为非负数。argv[argc]
应为空指针。- 如果
argc
的值大于零,则数组成员argv[0]
至[包含]argv[argc-1]
应包含指向字符串的指针程序启动之前,主机环境由实现定义的值。的目的是向程序提供在程序启动之前确定的信息来自托管环境中的其他位置。如果主机环境不具备提供带有大小写字母的字符串,实现应确保字符串以小写形式接收。- 如果
argc
的值大于零,则由argv[0]
指向的字符串代表程序名称;如果argv[0][0]
为空字符,则程序名称在主机环境中不可用。如果argc
的值是大于1时,由argv[1]
到argv[argc-1]
指向的字符串代表程序参数。- 参数
argc
和argv
以及由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
../ a.out是第一个参数,所以这就是argcount等于1的原因。
从C标准(5.1.2.2.1程序启动。第2页)
—如果argc的值大于零,则由指向的字符串argv [0]表示程序名称; argv [0] [0]为null如果程序名称不能从主机获得,则为字符环境。
因此,您所使用的环境在第一个参数中提供了程序名称。