为什么不能在for循环中评估“数组为NULL”?

Mik*_*ike -1 c for-loop multidimensional-array

我试图计算用于存储“ res”的数组的数组的元素,这些内存用于连接存储在“ argv”中的每个字符串,包括NULL终止符。可能会发现更多错误,但是我不了解的第一个错误是argv[a][b] != NULL在中/* length of arrays */。为什么这是不可接受的,还有其他方法(没有硬编码或传递长度)来确定元素数量?

使用的:http//pythontutor.com/c.html#mode=edit

char    *ft_concat_params (int argc, char **argv)
{
    int len_argc = argc - 1,
        len_argv = 0;
    char *res = NULL;

    /* length of argvs */
    for (int a = 0; a < len_argc; a++) {
      for (int b = 0;argv[a][b] != NULL; b++) {
        len_argv++;
      }
    }

    /* allocate memory res -- freed by calling function! */
    res = malloc (len_argv * sizeof * res);
    if (!res) {
      ft_putstr ("not allocated res");
      free(res);
      return NULL;
    }

    /* concate strings */
    for (int a = 0; a < len_argc; a++) {
      int b = 0;
      while (argv[a][b] != '\0') {
        res = &argv[a][b];
        b++;
      }
      res[b] = '\0';
    }

    return res;
}

int   main(void)
{
  int argc = 4;
  char argv[3][6] = {
    {'s','t','a','r','t','\0'},
    {'s','t','a','r','t','\0'},
    {'s','t','a','r','t','\0'}
  };
  char *arr;

  arr = ft_concat_params (argc, argv);
  if (!arr)       /* validate return */
      return 1;

  free(arr);
}
Run Code Online (Sandbox Code Playgroud)

abe*_*nky 6

这行:

char *res = 'NULL'; 
Run Code Online (Sandbox Code Playgroud)

不将指针初始化为NULL。而是将其设置为一些奇怪的,无意义的32位值。

你想开始

char *res = NULL;  // NOTE:  No single-quotes around it.
Run Code Online (Sandbox Code Playgroud)

  • 实际上,该值在设置之前就没有使用过,因此`char * res;`就足够了。但是要赞扬一下,因为您的图标非常适合用来解释您看到错误^^时的想法 (2认同)