使用fixed语句,一个指针可以指向一个字符串。使用该指针,可以修改该字符串。但在C#文档中是否允许呢?
using System;
class Program
{
static void Main()
{
string s = "hello";
unsafe
{
fixed (char* p = s)
{
p[1] = 'u';
}
}
Console.WriteLine("hello");
Console.Write("hello" + "\n");
Console.ReadKey();
}
}
// hullo
// hello
上述程序修改了一个字符串常量。
unsafe
和相关功能时是绝对不正确的。这一点的重点在于,它允许您执行不明显安全的操作,但要求您声称它们是安全的。将其用于破坏语言不变式是_不安全的_使用方法。 - Cubicunsafe
,则假定您知道自己在做什么。但是,如果您乱写内部字符串,则不能保证运行时稳定性。 (甚至可能根本不允许这样做 - 运行时可能会将它们保留在只读页面并故障。当前实现不会这样做。) - Jeroen Mostert