我正在尝试将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 Beginner - Copying a char *array to another char *array
感谢。
答案 0 :(得分:2)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
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
分配足够的空间。
编辑:第二个for
循环以显示内容。
答案 1 :(得分: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);
BTW你可以替换
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个命令行参数,则会遇到问题。