如何将字符串[]转换为字符**?
How to convert string[] to char**?
我有一个我依赖的库接收一个结构 char**
作为函数的参数之一。
我想要一个包装器来接收 List<string>
(或任何 string[]
)并创建一个 char**
以放入该结构。编译器对我的代码没有问题,但我真的不确定我是否正确理解了 fixed
和 unsafe
概念,而且我害怕出现意外后果:
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
对象来管理此内存。
我有一个我依赖的库接收一个结构 char**
作为函数的参数之一。
我想要一个包装器来接收 List<string>
(或任何 string[]
)并创建一个 char**
以放入该结构。编译器对我的代码没有问题,但我真的不确定我是否正确理解了 fixed
和 unsafe
概念,而且我害怕出现意外后果:
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
对象来管理此内存。