C - 为函数内的双指针赋值

the*_*tig 2 c pointers

我试图理解C,特别是双指针,我遇到了这个问题.我知道一个单指针(删除for循环等)这个概念可以工作,但我似乎在定位注释中得到一个seg错误.

有人可以解释为什么我得到这个错误?我有一种预感,在我传递myArgs的地址之前我需要为它分配一些内存,但是因为我只是做一个浅拷贝,我还需要分配内存吗?

void readArgs(int argc, char *argv[], char ***myArgs) {
   int i;
   for(i = 0; i < argc; i++) {
      /* crashes here @ i = 0 */
      *myArgs[i] = argv[i];
   }
}

int main(int argc, char *argv[]) {
   char **myArgs;
   int i;

   readArgs(argc, argv, &myArgs);
   for(i = 0; i < argc; i++)
      printf("arg[%d]: %s\n", i, myArgs[i]);
}
Run Code Online (Sandbox Code Playgroud)

Fre*_*Foo 6

你得到了一个段落错误,因为它myArgs是未初始化的.你应该确实分配空间malloc.你不是一个浅薄的副本; 你正在复制一个指针数组.

也就是说,三指针是C中的代码气味.你永远不需要超过**.

  • 同意,被称为"三星级程序员"并不是一种恭维. (3认同)