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

时间:2010-02-18 22:53:37

标签: c# string escaping pex pex-and-moles

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

这是什么意思?根据我的方法内容,我的猜测是一个空字符串("")。但是,如果它是相同的,那么为什么不使用""代替"\0"

任何人都知道它是什么?

6 个答案:

答案 0 :(得分:36)

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

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

修改

只是要明确...... Pex正在传递一个包含空字符的字符串。这是空引用。

答案 1 :(得分:5)

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

int firstCodePoint = text[0];

然后你会发现firstCodePoint为0。

答案 2 :(得分:3)

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

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

答案 3 :(得分:2)

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

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

答案 4 :(得分:2)

Escape Sequence  
\0    
Character Name 
Null    
Unicode Encoding     
0x0000

See this link.

答案 5 :(得分:1)

我刚刚找到一个很好的例子,其中\0非常重要和必要。

假设我们要删除以下代码中最后一个不需要的,

for (int i = 0; i < 5; i++)
{
    foreach (var a in "Money")
        Console.Write($"{a},");
}

enter image description here

如果我们仅按如下方式添加Console.Write("\b\n");

for (int i = 0; i < 5; i++)
{
    foreach (var a in "Money")
        Console.Write($"{a},");
    Console.Write("\b\n");
}

输出将保持不变。

但是,如果我们如下添加\0

for (int i = 0; i < 5; i++)
{
    foreach (var a in "Money")
        Console.Write($"{a},");
    Console.Write("\b\0\n");
} 

不需要的结尾,消失了。

enter image description here