【问题标题】:Comparing a char to the char '\"' [closed]将 char 与 char '\"' 进行比较 [关闭]
【发布时间】:2020-03-12 20:48:17
【问题描述】:

我正在使用 C 语言,需要从用户那里接收格式为“abcd”的字符串,并对其进行诊断以将其检索为“abcd”字符串(int the code)。 出于某种原因,当我尝试检查字符串中的第一个字符(我使用 sscanf 读取的)是否为 " 时,它不会返回它,如下图所示。手表说 data[0] 是 '"',但是 data[0] == '"' 是假的,这很荒谬。

【问题讨论】:

  • ????????请在此处以纯文本形式发布代码、错误、示例数据或文本输出,而不是难以阅读、无法复制粘贴以帮助测试代码或在答案中使用的图像,并且对依赖的人构成障碍在屏幕阅读器上。您可以编辑问题以在问题正文中添加代码。为了便于格式化,请使用{} 按钮标记代码块,或者使用四个空格缩进以获得相同的效果。 屏幕截图的内容无法搜索、作为代码运行或复制和编辑以创建解决方案。
  • 我们在这里处理什么代码?我看到的只是一个 ASCII 34 字符的屏幕截图。
  • @DYZ 格式可以包含引号,比如 JSON,但我们不知道,因为我们看不到代码。
  • 这不是代码,这是 Visual Studio 上的 Watch。

标签: c string char


【解决方案1】:

data[0] 中的字符可能是一个特殊的引号,其 ASCII(或者更确切地说是Windows-1252)代码为 147/0x93。它是一个最高位为 1 的数字,因此超出了 7 位 ASCII 范围。虽然 7 位 ASCII 代码在许多字符集中的解释相同,但对于 8 位值 (> 127) 则并非如此。给定终端或打印机将为 8 位值显示的“字形”取决于假设的字符集(在您的情况下,如前所述,Windows-1252)。

最后一点,因为在您的系统上,字符已签名,调试器会将最高位解释为减号并显示负值。我认为您可以在调试器监视表达式中将其转换为 unsigned char 以获得正等值。

那个字符不能直接用键盘输入;在 Windows 上,您可以尝试使用 Alt+Number block 技巧。当您输入普通引号时,您会创建一个 ASCII 码 34/0x22 的字符,编译器和调试器正确地声称它是不相同的。

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 2013-12-21
    • 1970-01-01
    • 2019-11-08
    • 1970-01-01
    • 2020-08-24
    • 1970-01-01
    • 2012-05-03
    相关资源
    最近更新 更多