gpt4 book ai didi

c - 传递一个双指针来修改字符串

转载 作者:行者123 更新时间:2023-12-02 02:06:56 26 4
gpt4 key购买 nike

所以我有一个程序有时可以工作,但有时却不能。有时放入 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 */
}

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

最佳答案

由于 parse() 的 API 是用 char ** 指定的,我相信可以安全地假设您确实确实需要调用中的双重间接,但不在声明中。

所以您可能需要跳过 malloc() 调用并说:

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

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

关于c - 传递一个双指针来修改字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14544712/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com