我如何查看带有参数的数组是否在c中为null



我有此代码:

  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是第一个参数。

相关内容

  • 没有找到相关文章

最新更新