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

时间:2016-04-12 06:37:52

标签: c arrays pointers 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 Beginner - Copying a char *array to another char *array

感谢。

2 个答案:

答案 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个命令行参数,则会遇到问题。

相关问题