如何修复提到“stray’\ 342’”和“stray’ \ 200’”的编译错误?

我写了这个程序:

#include int main() { printf(“Hello World\n”); return 0; } 

我把它保存为first.c并试图编译但是接收到这个问题我甚至安装了gcc编译器。

 $ gcc first.c -o first1 first.c: In function 'main': first.c:4:1: error: stray '\342' in program first.c:4:1: error: stray '\200' in program first.c:4:1: error: stray '\234' in program first.c:4:11: error: 'Hello' undeclared (first use in this function) first.c:4:11: note: each undeclared identifier is reported only once for each function it appears in first.c:4:17: error: expected ')' before 'World' first.c:4:17: error: stray '\' in program first.c:4:17: error: stray '\342' in program first.c:4:17: error: stray '\200' in program first.c:4:17: error: stray '\235' in program 

我该如何解决这个问题?

问题是你有Unicode引号而不是ASCII引号; 可能是您的编辑器自动更改了它们,或者您从其创作软件中自动执行此操作的站点复制了文本。 用普通的ASCII引号(0x22,“)替换引号,它应该工作。

固定来源:

 #include  int main() { printf("Hello World\n"); return 0; } 

你把你的字符串用错误的引号括起来。

你有:

 “Hello World\n” 

你应该改为:

 "Hello World\n" 

虽然您使用的引号看起来相似,但C编译器不会将它们识别为包含字符串。 因此,您会收到有关无法识别的Unicode字符的错误消息,并且您会收到错误消息,表明该字符串的内容被解释为未加引号的程序代码。

您会注意到,您使用的引号具有单独的字符,用于开始和结束引用(它们的引号通常是排版的)。 许多文字处理器 – 正如Jobin建议的那样 – 会自动将简单的"引号”变成这样的花哨的引号。如果你使用文字处理器来编写C程序,你应该使用文本编辑器。

Ubuntu默认安装了gedit (尽管还有许多其他文本编辑器可供选择)。 像许多文本编辑器一样, gedit为包括C在内的许多编程语言提供语法高亮(因此程序中的不同文本将以不同的颜色显示以表示其含义),这是一个方便的function,使文本编辑器更方便和用户友好用于编程而不是文字处理器。

这可能是特定于Ubuntu的,如果您习惯于另一个平台上的文本编辑器,它会自动将粘贴的引号标记减少到非花哨的版本。 但是这个问题最终可能会被关闭并迁移到Stack Overflow 。

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

这样可以快速预览要替换的内容。

 sed -re 's/”|“/"/g' File.txt 

这将进行替换并将替换放在名为WithoutSmartQuotes.txt的新文件中:

 sed -re 's/”|“/"/g' File.txt > WithoutSmartQuotes.txt 

这将覆盖原始文件:

 sed -i .bk -re 's/”|“/"/g' File.txt