strcpy()上的分段错误11

时间:2015-10-15 19:08:00

标签: segmentation-fault

当我尝试复制" init"时,我一直遇到分段错误进入我的字符串数组,我无法弄清楚为什么。如果我注释掉strcpy()行,我就不会出现分段错误,并且init打印正常。

    FILE *fp = fopen(argv[1],"r");
    char *init = readToken(fp);
    printf("%s",init);      
    char **words =  malloc(sizeof(char*) * 2); 
    strcat(*words,init);

PS:readTokenfscanf

2 个答案:

答案 0 :(得分:0)

 char **words =  malloc(sizeof(char*) * 2); 

为什么使用双指针?

无论如何,如果你想将*words传递给strcat作为目的地,你必须分配它,因为上面的行只为char **words分配了内存,但当你取消引用它时有一个指向内存未定义区域的指针

答案 1 :(得分:0)

您分配了char * s:

的数组
char **words =  malloc(sizeof(char*) * 2); 

这些char *特别指向 nothing 。它们可能是NULL,它们可能指向堆栈,谁知道。他们没有初始化和未定义。

strcat(*words,init);

就像说

strcat(words[0], init);

如果words[0]已经指向某种有效的字符串,这将起作用。实际上,你将一个字符串附加到内存中的某个未知点。

strcpy(*words, init);

只需字符串写入内存中的未知点,这样做无济于事。

您需要为新字符串分配空间。最简单的方法是通过strdup(),它复制传入的字符串。所以:

*words = strdup(init);

会很好,

words[0] = strdup(init);