gpt4 book ai didi

c++ - 如何在 C++ 中创建 'char *[]'?

转载 作者:行者123 更新时间:2023-11-30 02:48:19 25 4
gpt4 key购买 nike

我正在尝试从 C++ 调用 C 库。该接口(interface)需要 char* []。如果我传递 const char * [],编译将失败。

我如何安全地创建其中之一?这是我能做的最好的,但我不知道它是否正确。我正在创建仅包含 1 个 c 字符串的数组。

string attr = "memberUid";
vector<char> attr_v(attr.begin(), attr.end());
attr_v.push_back('\0');
char * attrs[] = {&attr_v[0]};

我不想触发弃用的转换警告,即触发以下内容的警告:

char * attr = "memberUid";

最佳答案

假设您有一个字符串 vector ( std::vector<std::string> ),我称之为 source :

std::vector<char*> asArgument( source.size() );
std::transform(
source.begin(), source.end(),
asArgument.begin(),
[]( std::string const& elem ) { return const_cast<char*>( elem.c_str() ); } );
cFunction( asArgument.data(), asArgument.size() );

如果你需要char*的数组成为NULL终止,只是创建 asArgumentsource.size() + 1 .

当然,如果你需要字符串文字:

char const* asArgument[] = { ... };

会用 const_cast 来解决这个问题在调用站点(const_cast<char**>( asArgument ))。

这假设被调用的函数实际上并没有尝试修改任何东西;没有 const只是因为它是遗留代码。如果它确实修改了传递给的任何字符串它,你必须做深拷贝。

关于c++ - 如何在 C++ 中创建 'char *[]'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22094315/

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