.NET Marshal.PtrToStringUni(IntPtr)与新String(char*)

Meh*_*dad 5 .net c# string marshalling

什么之间的区别new String(char*)Marshal.PtrToStringUni(IntPtr),除了显而易见的事实是一个需要char*和一个需要IntPtr?我什么时候应该使用哪个?

我记得有一个非常随机的访问冲突,花了很多时间来追踪大约几年前使用构造函数时,当我使用它时,它就消失了PtrToStringUni.也许这不是真正的原因,我不知道,但它似乎是.

不过,我从未想过差异是什么.有任何想法吗?


编辑:

这个问题可以解答我的大部分问题; 但是:我的访问违规是否有任何解释,还是因为其他原因?

hoo*_*cus 0

不同之处在于,如果不陷入不安全的代码,就无法使用指针。char* 是一个实际的指针。IntPtr 包装一个指针。

从您链接的msdn:

“如果指定的数组不是以 null 终止的,则此构造函数的行为取决于系统。例如,这种情况可能会导致访问冲突。”

你的 char[] 是否以 null 结尾?