[英]Conversion of const char** to std::vector<std::string>
我有以下包装器可以将我的 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** fileList
转换为std: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++?
谢谢你的时间。
您需要为非托管代码提供某种方式来获取长度。 常用的方法有两种:
这两种选择都很简单,您可以实施。 选择完全取决于您的个人喜好。
如果选择第一个选项,则可以像这样填充向量:
std::vector<std::string> files(fileList, fileList + length);
如果您选择第二个选项,那么您将使用这样的循环:
std::vector<std::string> files;
const char** filePtr = fileList;
while (*filePtr != nullptr)
files.push_back(*filePtr++);
您需要知道fileList
数组的长度。 一旦你知道它,你可以转换fileList
使用
size_t length = ... ;
std::vector<std::string> files( fileList, fileList + length );
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.