如何将字符串[]转换为字符**?

How to convert string[] to char**?

我有一个我依赖的库接收一个结构 char** 作为函数的参数之一。

我想要一个包装器来接收 List<string>(或任何 string[])并创建一个 char** 以放入该结构。编译器对我的代码没有问题,但我真的不确定我是否正确理解了 fixedunsafe 概念,而且我害怕出现意外后果:

InternalAttributeKeys attrKeys;  // has { (char**) .keys , (int) .count }
unsafe 
{
    char*[] chars = new char*[keys.Count];
    for (var i = 0; i < keys.Count; ++i)
    {
        fixed (char* c = keys[i].ToCharArray())
        {
            chars[i] = c;
        }
    }
    fixed (char** keysPtr = chars)
    {
        attrKeys.keys = keysPtr;
    }
}
attrKeys.count = (uint) keys.Count;
return attrKeys;

我做对了吗?

通常是否有更好的方法来发送 char**(例如,我可以发送 char*[] 并期望 C# 在幕后进行转换)吗?

您可以使用 Linq

        var charArray = array.SelectMany(x => x.ToCharArray());

  string[] S = {"aaaaa",
                "bbbbb",
                "ccccc"};
  char[] C = string.Join(string.Empty, S).ToCharArray();

发现这个,似乎从不同的角度解决了我的问题(它看起来比我想出的任何东西都更可靠):

How can I copy a array of strings into an unmanaged char double pointer?

我将使用 Marshal.AllocHGlobal 并创建一个 IDisposable 对象来管理此内存。