好吧,这里有一些关于我想要达到的目标的概述。我希望用户能够输入任意数量的字符串,然后我希望将这些字符串保存在一个双字符指针中。目前我还没有处理为双字符指针扩展内存分配的问题,因为我想先让它工作。

char **list = malloc(sizeof(char*)*5);

for(i = 1; i < argc; i++) {
        strcpy(list[i], argv[i]);
}

我真的认为这很简单,所以希望我犯了个愚蠢的错误。在strcpy函数中我一直收到seg错误。

最佳答案

您所做的只是为字符串指针数组分配内存(这是正确的),但是您还需要为数组中的每个字符串分配内存:
第一个(简单)选项:

char **list = malloc(sizeof(char*) * argc);
for(i = 1; i < argc; i++)
{
    list[i] = strdup(argv[i]);
}

第二个(更复杂)选项:
size_t n = 0;
char **list = malloc(sizeof(char*) * argc);
for(i = 1; i < argc; i++)
{
    n = strlen(argv[i]) + 1;
    list[i] = malloc(n);
    strcpy(list[i],argv[i]));
}

09-30 16:59
查看更多