.NET Marshal.PtrToStringUni(IntPtr) vs. new String(char*)
本文关键字:String char new vs Marshal IntPtr NET PtrToStringUni | 更新日期: 2023-09-27 18:03:23
除了取char*
和取IntPtr
这一明显事实外,new String(char*)
和Marshal.PtrToStringUni(IntPtr)
有什么区别?什么时候用哪个?
我记得在几年前使用构造函数时遇到了一个随机访问冲突,花了大量的时间来追踪,当我使用PtrToStringUni
时它就消失了。也许那不是真正的原因,我不知道,但它似乎是。
我从来没有弄清楚区别是什么,虽然。什么好主意吗?
编辑:
这个问题回答了我的大部分问题;但是,我的访问违规是否有任何解释,还是因为其他原因?
根据链接的答案,我可以猜测您没有将指针固定在char*上,这导致(随机)GC在构造函数仍在运行时移动char*,从而导致访问冲突。我猜一下
不同之处在于,如果使用指针,就会陷入不安全的代码中。Char *是一个实际的指针。IntPtr封装指针
从您链接的msdn:
"如果指定的数组不是以null结尾的,则此构造函数的行为依赖于系统。例如,这种情况可能导致访问冲突。"
char[]以null结尾吗?