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

标签 c pointers

我试图理解 C,特别是双指针,我遇到了这个问题。我知道对于单个指针(删除 for 循环等)这个概念是可行的,但我似乎在定位的注释中遇到了段错误。

有人可以解释为什么我会收到此错误吗?我有一种预感,在我传递 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]);
}

最佳答案

您遇到了段错误,因为 myArgs 未初始化。您确实应该使用 malloc 分配空间。您不是在制作浅拷贝;你正在复制一个指针数组。

也就是说,三重指针是 C 语言中的一种代码味道。您永远不需要 **

关于C - 为函数内的双指针赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10667850/

相关文章:

c - 功能引用参数: pointer vs prototype merely style?

c++ - 内联汇编或单独的汇编文件

从 Lua 调用 C 嵌套函数指针

c - 如何在不等待用户输入的情况下从 stdin 获取字符?

c - 循环 strcmp 时出错

c - 将变量传递给 Loadrunner 中的函数

c++ - 字符指针在简单的 Boyer-Moore 实现中搞砸了

c++ - 指向 "inner struct"成员的指针是否被禁止?

c - 函数返回局部变量的地址 [-Wreturn-local-addr]

C#:将一个枚举包装在另一个枚举中(即镜像另一个枚举/复制它......)