传递双指针修改字符串

时间:2013-01-27 05:28:21

标签: c

所以我有一个有时可以运行的程序,但有时却没有。有时候输入printf语句会使程序神奇地工作(有时候printf会让它破坏)。这让我觉得,就指针/分配来说,我搞砸了,因为我仍然无法绕过某些东西。该程序太长,无法发布所有代码,所以我只会显示我认为问题所在。

我得到了一个函数,它接受一个FILE *和一些char **作为参数,返回一个int。该函数正在解析文件,将必要的字符串存储到双指针所指向的位置。

以下是我使用该函数的方法(很多代码被省略/简化):

char **s1;
char **s2;
char **s3;

int main(int argc, char ** argv){
    s1 = (char**)malloc(20);
    s2 = (char**)malloc(20);
    s3 = (char**)malloc(20);

    /* Unnecessary code omitted */
    read(inFile);
}

int read(FILE* in){
    /* omitted code */
    parse(in,s1,s2,s3);
    printf("%s",*s1); /* This is to show how I access the strings */
}

我很确定在程序的某个地方,这些字符串被覆盖了,因为我没有正确分配内存。希望我的错误在我给出的代码片段中可见,因为我没有很多其他理论来解释为什么我的代码不起作用

1 个答案:

答案 0 :(得分:2)

由于使用parse()指定了char **的API,我认为可以安全地假设你真的需要调用中的双重间接,但不是声明。

所以你可能需要跳过malloc()来电并说:

char *s1, *s2, *s3;
...
parse(in, &s1, &s2, &s3);

这将允许parse()分配自己的空间,并通过修改指针本身将三个指针返回给它的调用者。感谢您努力将问题提炼到核心,但看到 parse()的原型可能会很有趣。