Seg Faulting双指针,正确地编目(我相信)

时间:2012-03-16 00:54:37

标签: c

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

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

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

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

3 个答案:

答案 0 :(得分:3)

你所做的只是为字符串指针数组分配内存(这是正确的),但你还需要为数组中的每个字符串分配内存:

第一个(更简单)选项:

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]));
}

答案 1 :(得分:0)

您已经为字符串分配了一个指针数组,但是您没有为字符串本身分配任何空间。每次调用strcpy()时,都会向它传递一个未初始化的目标指针。在循环开头添加一行:

list[i] = malloc(strlen(argv[i]) + 1);

如果您希望它适用于任意数量的字符串,则您的初始分配必须是:

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

答案 2 :(得分:0)

你没有正确地使用malloced你只使用了主指针而不是其他指针。

试试这个

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
int main(int argc, char **argv) {
    char **list = malloc(sizeof(char*)*argc);
    int i;    
    for(i = 0; i < argc-1; i++) {
       list[i] = malloc(sizeof(char) * (strlen(argv[i+1]) + 1));
       strcpy(list[i], argv[i+1]);
       printf("%s\n", list[i]);
    }
return 0;
}
编辑我忘记了argv中的v

编辑(上面编辑的工作副本)输出

./temp hello this is a list of arguments
hello
this
is
a
list
of
arguments