【问题标题】:Stray '\342' in C++ programC++ 程序中的杂散“\342”
【发布时间】:2011-01-21 09:45:51
【问题描述】:

粘贴一些代码后,我的程序中出现这些错误:

showdata.cpp:66: error: stray ‘\342’ in program
showdata.cpp:66: error: stray ‘\200’ in program
showdata.cpp:66: error: stray ‘\235’ in program
showdata.cpp:66: error: stray ‘\’ in program
showdata.cpp:66: error: stray ‘\342’ in program
showdata.cpp:66: error: stray ‘\200’ in program
showdata.cpp:66: error: stray ‘\235’ in program
showdata.cpp:67: error: stray ‘\342’ in program
showdata.cpp:67: error: stray ‘\200’ in program
showdata.cpp:67: error: stray ‘\235’ in program
showdata.cpp:67: error: stray ‘\’ in program
showdata.cpp:67: error: stray ‘\342’ in program
showdata.cpp:67: error: stray ‘\200’ in program
showdata.cpp:67: error: stray ‘\235’ in program

这是导致错误的两行。

size_t startpos = str.find_first_not_of(” \t”);
size_t endpos = str.find_last_not_of(” \t”);

我该如何解决这个问题?

【问题讨论】:

标签: c++ compiler-errors


【解决方案1】:

符号 不是"。这些被称为“智能引用”,通常出现在丰富的文档或博客中。

【讨论】:

  • 我认为有人正在使用 Word 作为 IDE ;)
  • 或从博客复制粘贴代码。不管它是什么,这不是我们批评它的地方。
  • 它发生在我身上...我在 Word 上记录了我的旧 Turbo/Borland C (3.1) 代码。为了检查其中一些是否与 GCC/G++ 兼容,我将 DOC 文件中的选定部分粘贴到 GEdit。它就在那里......最糟糕的是,在我看到这个答案之前我从未注意到这种变化......嗯,也许我变老了:)
  • 在某些编辑器中使用“shift+enter”时会发生这种情况
  • 它是 Unicode 码位 U+201D (RIGHT DOUBLE QUOTATION MARK)。大多数具有regular expression 模式的文本编辑器(例如Geany(Linux 和Windows)和Notepad++)将能够使用\x{201D} 搜索/替换Unicode 代码点U+201D。
【解决方案2】:

线条

 size_t startpos = str.find_first_not_of(” \t”); 
 size_t endpos = str.find_last_not_of(” \t”); 

有一些“特殊”的双引号,试试下面的:

 size_t startpos = str.find_first_not_of(" \t"); 
 size_t endpos = str.find_last_not_of(" \t"); 

【讨论】:

    【解决方案3】:

    您可以使用 sed 命令来解决这些问题。

    这将使您快速预览将要替换的内容。

    sed s/[”“]/'"'/g File.txt

    这将执行替换并将替换放入名为WithoutSmartQuotes.txt 的新文件中。

    sed s/[”“]/'"'/g File.txt > WithoutSmartQuotes.txt

    这将覆盖原始文件。

    sed -i ".bk" s/[”“]/'"'/g File.txt

    【讨论】:

    • 我认为你不应该在 -i.bk 之间留一个空格 - GNU sed(至少)会分别解释它们(即“就地没有备份文件”和命令是语法错误)。
    • 如何在键盘上键入斜和倒斜双引号? (在 Linux 中)
    【解决方案4】:

    这种错误消息error: stray ‘\xyz’ in program 可以与编译器无法识别为合法的任何其他字符或符号一起出现。

    分享我的个人经验:

     - bool less<const char∗>(const char∗ a, const char∗ b)
     - bool less<const char*>(const char* a, const char* b)
    

    前一个是从 PDF 文件复制粘贴的。 它不能编译

    后一个按预期编译。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多