首页 > 解决方案 > 如何正确尊重作为地址传递给函数的 char** 指针?

问题描述

我正在编写一个使用 char ** 设置多维数组的程序。然后我将 char ** 的地址传递给另一个函数来使用。

** 指针通过地址传递给另一个函数后,如何正确地尊重它们?


c字符串的ERROR数组
分段错误

int test(char *** strings){
    puts(*strings[0]);
    puts(*strings[1]);
    return 1;
}

int main(void) {

    char arr[][25] =
    { "array of c string",
    "is fun to use",
    "make sure to properly",
    "tell the array size"
    };
    
    
  char ** strings = (char**)malloc(2 * sizeof(char*));
  
  strings[0] = (char*)malloc(25 * sizeof(char));
  strcpy(strings[0], arr[0]);
  
  strings[1] = (char*)malloc(25 * sizeof(char));
  strcpy(strings[1], arr[1]);
  
  test(&strings);

  return 1;
}

*Malloc 被强制转换,以防有人将其插入 C++ 操场

标签: cpointerspass-by-referencec-stringsdereference

解决方案


这有效:

int test(char *** strings){
    puts((*strings)[0]);
    puts((*strings)[1]);
    return 1;
}

因为[]比绑定更紧密*,您需要先取消引用。请参阅https://en.cppreference.com/w/c/language/operator_precedence


推荐阅读