C# – “\ 0”等同于什么?

我正在玩Pex ,它传递给我的方法的参数之一是"\0"

那是什么意思? 我的猜测是基于我的方法内容的空字符串( "" )。 但是,如果它是相同的,为什么不使用""而不是"\0"

有人知道这是什么吗?

‘\ 0’是“ 空字符 ”。 它用于终止C中的字符串和C ++的某些部分。 Pex正在测试你的代码如何处理null字符,可能正在寻找Poison Null Byte安全漏洞。

大多数C#代码都没有什么可担心的; 但是,如果将字符串传递给非托管代码,则可能会出现问题。

编辑:

只是为了明确…… Pex传递一个包含空字符的字符串。 这不是空引用。

它是一个包含字符’\ 0’的字符串。 C#不以任何特别的方式对待它 – 它只是unicode字符U + 0000。 如果你写:

 int firstCodePoint = text[0]; 

然后你会发现firstCodePoint是0。

它是一个带有空字符的字符串。 较旧的字符串库 – 与C或较旧的C ++库中使用的字符串库一样 – 使用’\ 0’字符表示字符串的结尾。

像.Net这样的新环境使用不同的系统,但是以’\ 0’结束字符串有很多历史,这是一个常见的错误点。 像Pex这样的测试库将使用它来确保您的程序正确处理它。

一个长度为1的字符串,包含字符\ u0000(又名NUL)。 这个角色没有特别对待。

在C中,它使用\ 0来终止字符串,你还分配一个长度为1的字符串。在这种情况下,标准字符串函数将报告长度为0,因为字符串包含\ 0以及终止它。 您可以安全地修改str [0],或者将单个字符strncat到其中。

 Escape Sequence \0 Character Name Null Unicode Encoding 0x0000 

看到这个链接。