gpt4 book ai didi

c++ - 将 std::string 转换为 C 函数的 char* 时要注意什么?

转载 作者:IT老高 更新时间:2023-10-28 23:12:03 27 4
gpt4 key购买 nike

我读过很多帖子,询问如何将 C++ std::stringconst std::string& 转换为 char* 将其传递给 C 函数,似乎有很多关于这样做的警告。必须注意字符串是连续的以及许多其他事情。关键是我从来没有真正理解所有需要注意的点以及为什么

我想知道是否有人可以总结从 std::string 到需要传递给 C 的 char* 转换的注意事项和缺点功能?

std::string 是一个 const 引用并且它只是一个非常量引用并且 C 函数将改变 char 时* 以及何时不会改变它。

最佳答案

首先,无论是 const 引用还是 value 都不会改变任何东西。

然后您必须考虑函数的期望。那里是函数可以用 char* 或a char const*---memcpy的原始版本,用于例如,使用了这些类型,并且可能仍然存在这样的代码。希望这是罕见的,在下文中,我将假设 C 函数中的 char* 引用 '\0'终止的字符串。

如果 C 函数采用 char const*,您可以将std::string::c_str() 的结果;如果它需要一个 char*,它要看。如果它需要一个 char* 仅仅是因为它的日期来自C 的const 天之前,实际上,它没有修改任何内容,std::string::c_str() 后跟 const_cast 是合适的。如果 C 函数使用 char* 作为输出参数,然而,事情变得更加困难。我个人更喜欢声明一个 char[] 缓冲区,传递这个,然后将结果转换为 std::string,但都是已知的std::string 的实现使用一个连续的缓冲区,并且标准的下一个版本将需要它,所以正确首先确定 std::string 的尺寸(使用std::string::resize(),然后通过 &s[0],然后将字符串重新调整为结果长度(确定using strlen(s.c_str()),如果需要)也可以使用。

最后(但这也是 C 程序使用的问题char[]),你必须考虑任何生命周期的问题。最多采用 char*char const* 的函数只需使用指针,忘记它,但如果函数保存指针某处,供以后使用,字符串对象必须至少存在长,并且在此期间不应修改其大小。(同样,在这种情况下,我更喜欢使用 char[]。)

关于c++ - 将 std::string 转换为 C 函数的 char* 时要注意什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5632572/

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