代码之家  ›  专栏  ›  技术社区  ›  Vaccano

“0”等于什么?

  •  20
  • Vaccano  · 技术社区  · 14 年前

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

    那是什么意思?我猜是一根空绳子( "" )基于我方法的内容。但是,如果它是相同的,那么为什么不只是使用 而不是 “0” 是吗?

    有人知道是什么吗?

    5 回复  |  直到 11 年前
        1
  •  35
  •   Randolpho    14 年前

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

    大多数C代码都不需要担心;但是,如果将字符串传递给非托管代码,则可能会出现问题。

    编辑:

    只是说清楚…Pex正在传递包含空字符的字符串。这是 空引用。

        2
  •  5
  •   Jon Skeet    14 年前

    它是包含字符'\0'的字符串。C不会以任何特别的方式处理这个问题——它只是Unicode字符U+0000。如果你写:

    int firstCodePoint = text[0];
    

    然后你会发现 firstCodePoint 是0。

        3
  •  3
  •   Randolpho    14 年前

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

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

        4
  •  2
  •   Lachlan Roche    14 年前

    长度为1的字符串,包含字符\u0000(即nul)。这个角色没有特别处理。

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

        5
  •  1
  •   Uke    11 年前
    Escape Sequence  
    \0    
    Character Name 
    Null    
    Unicode Encoding     
    0x0000
    

    See this link.