Meh*_*dad 5 .net c# string marshalling
什么之间的区别new String(char*)和Marshal.PtrToStringUni(IntPtr),除了显而易见的事实是一个需要char*和一个需要IntPtr?我什么时候应该使用哪个?
我记得有一个非常随机的访问冲突,花了很多时间来追踪大约几年前使用构造函数时,当我使用它时,它就消失了PtrToStringUni.也许这不是真正的原因,我不知道,但它似乎是.
不过,我从未想过差异是什么.有任何想法吗?
这个问题可以解答我的大部分问题; 但是:我的访问违规是否有任何解释,还是因为其他原因?
不同之处在于,如果不陷入不安全的代码,就无法使用指针。char* 是一个实际的指针。IntPtr 包装一个指针。
从您链接的msdn:
“如果指定的数组不是以 null 终止的,则此构造函数的行为取决于系统。例如,这种情况可能会导致访问冲突。”
你的 char[] 是否以 null 结尾?