不安全的字符串指针语句

Dzm*_*voi 9 .net c# unsafe fixed-statement

据我所知,根据MSDN C#fixed语句应该像:

fixed (char* p = str) ... // equivalent to p = &str[0]
Run Code Online (Sandbox Code Playgroud)

所以,为什么我不能这样做?

    const string str = "1234";
    fixed (char* c = &str[0])
    {
/// .....
    }
Run Code Online (Sandbox Code Playgroud)

str[1]作为一个例子,我怎样才能得到指针?

Cod*_*aos 7

由于获取指向后一个元素的指针直接适用于数组,但不能使用字符串,因此似乎唯一的原因是MS没有实现它.按照数组的语义,可以很容易地设计它.

但是您可以轻松地计算指向其他数组元素的另一个指针.所以这在实践中不是一个大问题:

fixed (char* p = str)
{
   char* p1 = p+1;
}
Run Code Online (Sandbox Code Playgroud)


Moh*_*han 4

这是因为[]字符串上的运算符是一个返回值的方法。当方法的返回值是原始值类型时,它没有地址。

[]C# 中的运算符与 C 中的运算符不同。[]在 C 中,数组和字符串只是指针,对[]指针应用运算符相当于移动指针并取消引用它。这在 C# 中不成立。

实际上,您链接的 MSDN 文档中有一个错误,该错误已在最新版本中修复。

有关此问题的更多解释,请参阅此处。