gpt4 book ai didi

c# - 将 const char** 转换为 std::vector

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

我有以下包装器将我的 C++ 代码公开给 C#

extern "C" {
LIBRARY_API void GenerateTables(
const char* version,
const char* baseDir,
const char** fileList);
} // end extern "C"

void GenerateTables(
const char* version,
const char* baseDir,
const char** fileList)
{
std::string strVersion(version);
std::string strBaseDir(baseDir);

// I now need to convert my const char** to std::vector<std::string>
// so it can be passed to another internal method.
}

如何转换我的 const char** fileListstd:vector<std::string> .我对 C++ 比较陌生,这里的内存分配有一个明显的问题。我可以做类似的事情

std::vector<std::string> vec;
for (int i = 0; i < fileList.length() /* length() of what!? */; i++)
vec.push_back(/* what!? */);

我如何进行所需的转换,是否有更好的方法通过互操作将字符串数组 ( string[] ) 从 C# 传递到 C++?

感谢您的宝贵时间。

最佳答案

您需要为非托管代码提供某种获取长度的方法。有两种常用的方法:

  1. 将数组的长度作为额外参数传递。
  2. 使用空终止数组。当您遇到一个为 null 的项目时,数组结束。

任一选项都足够简单,您可以实现。选择完全取决于您的个人喜好。

如果您选择第一个选项,那么您可以像这样填充 vector :

std::vector<std::string> files(fileList, fileList + length);

如果您选择第二个选项,那么您将使用这样的循环:

std::vector<std::string> files;
const char** filePtr = fileList;
while (*filePtr != nullptr)
files.push_back(*filePtr++);

关于c# - 将 const char** 转换为 std::vector<std::string>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161672/

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