c数组连接问题

kei*_*one 1 c arrays

我正在尝试将数组与argv中的数组连接起来(我忘了它的正式名称,输入数组?参数数组?)

无论如何,我初始化原始数组,然后我memcpy用来将两个数组复制到新数组中.

int main(int argc, char *argv[]) {
  char *args1[] = {"foo","bar"};
  char **args = (char**) calloc(argc, sizeof(char*));
  memcpy(args, args1, sizeof(char*) * 2);
  memcpy(args + sizeof(char*) * 2, argv+1, sizeof(char*) * (argc-1));
Run Code Online (Sandbox Code Playgroud)

但是当我跑这个

  printf("%s %s %s\n", args[0], args[1], args[2]);
Run Code Online (Sandbox Code Playgroud)

然后跑

./test baz

我得到了结果

foo bar(null)

所以我想弄清楚我的第二个memcpy搞砸了,但我找不到它.有帮助吗?提前致谢.

chr*_*ock 5

这段代码有两个问题.

问题#1

calloc(argc, sizeof(char*))
Run Code Online (Sandbox Code Playgroud)

应该

calloc(argc + 2, sizeof(char*))
Run Code Online (Sandbox Code Playgroud)

问题#2

你是混淆指针算术.这部分

args + sizeof(char*) * 2
Run Code Online (Sandbox Code Playgroud)

应该只是

args + 2
Run Code Online (Sandbox Code Playgroud)

或者,您可以使用

&args[2]
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,都不要将偏移量乘以类型的大小.编译器会自动执行此操作.