我有此代码:
int main(int re, char *args[]){
int comp=1;
int j=2;
int count=0;
//printf("%d",args[1]);
while(comp!=0){
comp=strcmp(args[j],"null");
j++;
count++;
}
}
我想看看我的参数数组中有多少个字符串(args []),问题在于一个分段故障,我找不到原因。当我将null放置为" null"时,我会得到相同的结果,分段故障。ARGS [J]有问题吗?还是我看不到的其他东西?我在我的数组中摆脱了弹跳?我知道字符串从args [2]开始,所以这就是为什么我将j = 2放入代码中的原因我将标题文件#include放置在使用strcmp
"null"
是一个字符串,没有特殊含义, NULL
是一个零件(您也可以为其编写0
),这是您的意思,但将其比较为字符串(带有strcmp()
)不会使任何有意义。您想知道args[j]
上的 pointer 是null(然后,它没有指向任何东西,所以它不是字符串)。
尽管您通过 first 参数中的参数数量转到了main()
,无论如何几乎总是更易于使用,但C标准可以保证您的argv[argc]
确实是NULL
,因此您的方法在正确实施。示例:
int main(int argc, char **argv)
{
int i = 0;
while (argv[i]) // or more explicit while (argv[i] != NULL)
{
puts(argv[i++]); // print this argument
}
}
标准中的相关段落(在此引用N1570)为§5.1.2.2.1p2 :
[...]
-argv[argc]
应为无效指针。
主函数有两个参数
int main(int argc, char **argv);
argc
计数参数的数量
argv
在2D数组中具有参数为字符串。
所以,您可以说:
if (argc == 1)
{
printf("I'm having 0 arguments in Total");
}
第一个ARGC占用可执行文件的名称-a.out
-。因此,如果您没有更改名称,则A.Out是第一个参数。