程序中的杂散“\303”和杂散“\215”——为啥?

Posted

技术标签:

【中文标题】程序中的杂散“\\303”和杂散“\\215”——为啥?【英文标题】: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这个命令呢,你试过了吗? ***.com/a/6526863/2591612 一个原因可能是您的变量名中有非 ASCII 字符。 Visual Studio 允许这些,但不允许 GCC。 如果您使用的是 Linux/Unix/Mac OSX,请尝试输入“cat -vet algo.c”来查看字符。 您可以查看文件algo.c 中的第118 行来查找问题。也许也发布它以使您的问题易于理解? 【参考方案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 问题

【讨论】:

以上是关于程序中的杂散“\303”和杂散“\215”——为啥?的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 响应中的杂散字符?

string中的杂散知识点

telnet 协商中的杂散数据字节。它来自哪里?

在 snprintf 的输出中看到的杂散字符

为啥杂散的 </p> 结束标记会生成一个空段落?

当我尝试编译此程序时,程序错误中出现杂散的“#”