如何在C中将char指针数组复制到另一个

我试图将char指针数组存储到另一个char指针数组。 我正在获得相同的分段错误。

int main(int argc, const char* argv[]) { int argcCpy = argc; char* argvCpy[10] = {}; for(argcCpy = argc; argcCpy>0; argcCpy--) { argvCpy[argcCpy] = (char *) malloc(strlen(argv[argcCpy])); memcpy(argvCpy[argcCpy], argv[argcCpy], strlen(argv[argcCpy])); printf("\nCount: %d, string: %s", argcCpy, argvCpy[argcCpy]); } return 0; } 

我花了足够的时间来完成这项工作,但我无法做到。 此外,已经提出了同样的问题,这个问题也没有得到答复。 如果有人可以让我知道相同的工作代码,那将非常有帮助。

希望这个回答。

类似问题的链接没有被发现 – C初学者 – 将char *数组复制到另一个char *数组

谢谢。

 #include  #include  #include  int main(int argc, const char* argv[]) { int argcCpy = argc; char* argvCpy[10] = {}; if (argc > 9) { return 1; } for(int i = argc; i > 0; i--) { if (argv[i] == NULL) { argvCpy[i] = NULL; } else { argvCpy[i] = (char *) malloc(strlen(argv[i]) + 1); if (argvCpy[i] != NULL) { strcpy(argvCpy[i], argv[i]); } } } for (int i = 0; i <= argcCpy; i++) { if (argvCpy[i] != NULL) { printf("Count: %d, string: %s\n", i, argvCpy[i]); } else { printf("Count: %d, string is null\n", i); } } return 0; } 

检查argc不是太高。 argv[argc]为NULL,考虑到这一点。 使用strcpy ,并为结尾\0分配足够的空间。

编辑:第二个循环显示内容。

您必须为终止NUL分配一个字节:

更改

  malloc(strlen(argv[argcCpy]); 

  malloc(strlen(argv[argcCpy] + 1); 

并且您还必须使用memcpy复制一个字节

更改

  memcpy(argvCpy[argcCpy], argv[argcCpy], strlen(argv[argcCpy])); 

  memcpy(argvCpy[argcCpy], argv[argcCpy], strlen(argv[argcCpy]) + 1); 

顺便说一句,你可以更换

  memcpy(argvCpy[argcCpy], argv[argcCpy], strlen(argv[argcCpy]) + 1); 

通过

  strcpy(argvCpy[argcCpy], argv[argcCpy]); 

这更简单,更清晰。

最后但并非最不重要的是替换

 for(argcCpy = argc; argcCpy>0; argcCpy--) 

通过

 for(argcCpy = argc - 1; argcCpy>0; argcCpy--) 

argv数组的最后一个元素是argv[argc-1]

但请注意,如果您有超过10个命令行参数,则会遇到问题。