gpt4 book ai didi

c - 如何正确地将函数返回的 const char* 转换为 C 中的 const char**?

转载 作者:行者123 更新时间:2023-12-01 11:59:51 24 4
gpt4 key购买 nike

简而言之,我想这样做:

const char **stringPtr = &getString();

但是,我知道您不能 & 在右值上。所以我坚持这个:

const char *string = getString();
const char **stringPtr = &string;

我可以接受两条线。我是否引入了这个 hack 的问题?我不应该担心将 stringPtr 传递到它声明的函数之外,对吧?

编辑:我很抱歉最初没有包括完整的上下文。我参与了一个暑期项目,即使用 OpenGL 图形从头开始用 C 语言构建视频游戏。我正在使用 libconfig 从文本文件中读取配置数据.

从配置文件中查找特定字符串的便利函数之一如下所示:

int config_setting_lookup_string(const config_setting_t *setting,
const char *name, const char **value)
{
config_setting_t *member = config_setting_get_member(setting, name);
if(! member)
return(CONFIG_FALSE);

if(config_setting_type(member) != CONFIG_TYPE_STRING)
return(CONFIG_FALSE);


*value = config_setting_get_string(member);
return(CONFIG_TRUE);
}

值的分配方式意味着如果你给函数一个未初始化的,它会尝试取消引用未定义的垃圾,这几乎总是导致我出现段错误。我当前针对此问题的解决方法是首先将 value 初始化为另一个指针,如下所示:

const char *dummyPtr;
const char **fileName = &dummyPtr;
config_setting_lookup_string(foo, "bar", fileName);

所以我想找出重写函数最后一部分的最佳方法,这样我就不必执行这个两步初始化。我在想改变后的函数应该是这样的:

int config_setting_lookup_string(const config_setting_t *setting,
const char *name, const char **value)
{
config_setting_t *member = config_setting_get_member(setting, name);
if(! member)
return(CONFIG_FALSE);

if(config_setting_type(member) != CONFIG_TYPE_STRING)
return(CONFIG_FALSE);

const char *string = config_setting_get_string(member);
value = &string;
return(CONFIG_TRUE);
}

最佳答案

如果您正在调用一个需要 const char** 的函数,您可以这样做:

const char *s = getString();
myFunction(&s);

因为在上面的例子中 s 是分配在栈上的,如果你想从你的函数返回一个 const char**,你需要把它放在堆代替:

const char **sp = malloc(sizeof(const char *));
*sp = getString();
return sp;

HTH

关于c - 如何正确地将函数返回的 const char* 转换为 C 中的 const char**?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2796579/

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