C# - "\ 0"等同于什么?

Vac*_*ano 21 c# string pex escaping pex-and-moles

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

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

有人知道这是什么吗?

Ran*_*pho 39

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

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

编辑:

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

  • 请注意,NULL字符串与空字符串不同.从MSDN文章:"相反,空字符串不引用System.String对象的实例,任何尝试在空字符串上调用方法都会导致NullReferenceException.但是,您可以在串联中使用空字符串与其他字符串的比较操作.以下示例说明了对空字符串的引用执行且不会引发异常的一些情况" (3认同)

Jon*_*eet 5

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

int firstCodePoint = text[0];
Run Code Online (Sandbox Code Playgroud)

然后你会发现firstCodePoint是0.


Joe*_*orn 5

它是一个带有空字符的字符串。较旧的字符串库(如在 C 或较旧的 C++ 库中使用的库)使用 '\0' 字符来指示字符串的结尾。

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