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

how i can see if an array with arguments is null in c

我有这个代码:

  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[]) 中有多少个字符串,问题是 take 分段错误,我找不到原因。 当我将 NULL 改为 "null" 时,我得到相同的结果,分段错误。 args[j] 有问题?还是我看不到的其他东西? 我在我的阵列中摆脱了反弹? 我知道字符串从 args[2] 开始所以这就是为什么我在代码中放 j=2 我把头文件#include 放在使用strcmp

main函数有两个参数,

int main(int argc, char **argv);

argc统计参数个数

argv 将参数作为二维数组中的字符串。

所以,你可以说:

if (argc == 1)
{
   printf("I'm having 0 arguments in Total");
}

第一个 argc 占用可执行文件的名称 - a.out- 。所以,如果您没有更改名称,a.out 是第一个参数。

"null" 是一个没有特殊含义的字符串文字,而 NULL 是一个空指针(你也可以为它写 0 ),这就是你意思是,但是将它作为一个字符串(与 strcmp())进行比较并不会使 any 有意义。你想知道 pointer at args[j] 是否为 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.1 p2:

[...]
-- argv[argc] shall be a null pointer.