我有一个依赖的库,该库接收带有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();