繁体   English   中英

const char** 到 std::vector 的转换<std::string>

[英]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++?

谢谢你的时间。

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

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

这两种选择都很简单,您可以实施。 选择完全取决于您的个人喜好。

如果选择第一个选项,则可以像这样填充向量:

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM