【问题标题】:Stray "\303" and stray "\215" in program -- why?程序中的杂散“\303”和杂散“\215”——为什么?
【发布时间】:2014-03-13 16:05:52
【问题描述】:

在我找到 here 的程序中,我收到了错误消息,而不是杂散的“\302”:

algo.c:118: error: stray ‘\303’ in program
algo.c:118: error: stray ‘\215’ in program

我看不懂,这是什么?

  • 编辑

为了将来的参考,流浪的 '\XXX' 意味着编译器无法理解的字符。修复的方法是找到'\XXX'字符(现在我发现它并不总是这个unicode,它不可能是错误的定义,例如'##define'中的'##'),然后删除或纠正它。祝你好运!

【问题讨论】:

  • 这是从 Windows 复制到 Linux 的吗? dos2unix这个命令呢,你试过了吗?
  • 一个原因可能是您的变量名中有非 ASCII 字符。 Visual Studio 允许这些,但不允许 GCC。
  • 如果您使用的是 Linux/Unix/Mac OSX,请尝试输入“cat -vet algo.c”来查看字符。
  • 您可以查看文件algo.c 中的第118 行来查找问题。也许也发布它以使您的问题易于理解?

标签: c


【解决方案1】:

这些是:

00C3    LATIN CAPITAL LETTER A WITH TILDE
        : 0041 0303
        U+00C3, character Ã‬, decimal 195, hex 0xC3, octal \303, binary 11000011
        UTF-8: 0xc3 0x83

008D    <control>
        = REVERSE LINE FEED
        U+008D, character ‬, decimal 141, hex 0x8D, octal \215, binary 10001101
        UTF-8: 0xc2 0x8d

我猜那些不是故意的。有时,如果您在窗口完全加载并完成其stty 操作之前开始输入,则在终端中进行编辑会产生这种情况。我经常在emacs看到这种事情。

解决方案:转到相应的行并删除字符。 cat -teless 有助于识别哪些字符有问题。

【讨论】:

  • 最简单的方法通常是编辑文件,按照如下所示重新键入有问题的行,然后删除其中包含(不可见)垃圾的原始文件。
  • 这是一个在vim中没有显示但出现在sublime text 2中的字符。我想我可能是错误地输入了这个并忘记了它,因为代码的长度。
  • 但我的解决方法只是删除拉丁大写字母。我没有看到反向换行字符。那是因为它只是自动带有一个拉丁字符吗?
  • 在 UTF-8 中,序列 0xC3 0x8D 表示单个字符 U+00CD LATIN CAPITAL LETTER I WITH ACUTE,这可能就是您所看到的。
【解决方案2】:

作为附加答案,当我想输入需要Alt Gr 组合的字符时,我经常会遇到这种情况。通常我的手指滑了,这会导致隐藏的垃圾字符。 如前所述,更好的解决方案是重写斑点线。

【讨论】:

    【解决方案3】:

    在代码中使用非 ascii 字符可能会导致此错误。 我在 enum 中使用 öäü... 遇到了 sam 问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-08
      • 1970-01-01
      相关资源
      最近更新 更多