Wie kann man Kompilierungsfehler beheben, die "streunend" \ 342 '"und" streunend' \ 200 '"erwähnen? [geschlossen]

9

Ich habe dieses Programm geschrieben:

#include<stdio.h>
int main()
{
printf(“Hello World\n”);
return 0;
}

Ich habe es als gespeichert first.cund versucht zu kompilieren, aber als ich dieses Problem erhielt, habe ich auch den gcc-Compiler installiert.

$ 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

Wie kann ich dieses Problem beheben?

Zahid
quelle
Haben Sie dieses Programm aus einem anderen Textverarbeitungsprogramm oder Dokument wie Libre Office oder Microsoft Word kopiert?
Jobin
Wenn Sie den Code von irgendwoher kopiert haben, schreiben Sie den Code selbst neu, da in den von Ihnen kopierten Code möglicherweise einige unerwünschte Codes eingebettet sind.

Antworten:

13

Das Problem ist, dass Sie Unicode-Anführungszeichen anstelle von ASCII-Anführungszeichen haben. Wahrscheinlich hat Ihr Editor sie automatisch geändert, oder Sie haben den Text von einer Site kopiert, die dies automatisch in ihrer Authoring-Software tut. Ersetzen Sie die Anführungszeichen durch normale ASCII-Anführungszeichen (0x22, ") und es sollte funktionieren.

Feste Quelle:

#include <stdio.h>
int main()
{
    printf("Hello World\n");
    return 0;
}
Krzysztof Kosiński
quelle
+1 Ich habe mich gefragt, wie er diese Vorwärts- / Rückwärtszitate dort reingekommen hat.
Aaron
Unicode- und ASCII-Anführungszeichen sind möglicherweise nicht die beste Methode, um die Unterscheidung anzugeben, da die korrekten Anführungszeichen für Zeichenfolgen in C ( ") ebenfalls Unicode-Zeichen sind. (Es handelt sich auch um ASCII-Zeichen, aber jedes Mal, wenn jemand zwischen beiden wählt, wird seine Datei wahrscheinlich in einem Unicode-Format gespeichert. Auf einem Unix-ähnlichen System, normalerweise UTF-8.)
Eliah Kagan
andere hinterhältige Charaktere sind die anstelle der -.
Trevor Boyd Smith
2

Sie schließen Ihre Zeichenfolge in falsche Anführungszeichen ein.

Du hast:

Hello World\n

Sie sollten stattdessen haben:

"Hello World\n"

Die von Ihnen verwendeten Anführungszeichen sehen zwar ähnlich aus, werden jedoch von einem C-Compiler nicht als eine Zeichenfolge eingeschlossen erkannt. Auf diese Weise erhalten Sie Fehlermeldungen zu nicht erkannten Unicode-Zeichen und Fehlermeldungen, die anzeigen, dass der Inhalt der Zeichenfolge als nicht in Anführungszeichen stehender Programmcode interpretiert wird.

Sie werden feststellen, dass die von Ihnen verwendeten Anführungszeichen separate Zeichen zum Beginnen und Beenden eines Zitats haben (sie sind so gekrümmt, wie Anführungszeichen häufig gesetzt werden). Viele Textverarbeitungsprogramme - wie Jobin vorgeschlagen hat - verwandeln einfache "Anführungszeichen automatisch in solche ausgefallenen Anführungszeichen. Wenn Sie zum Erstellen von C-Programmen ein Textverarbeitungsprogramm verwenden, sollten Sie stattdessen einen Texteditor verwenden.

Ubuntu geditwird standardmäßig installiert (obwohl auch viele andere Texteditoren zur Auswahl stehen). Wie viele Texteditoren, geditbietet Syntax - Hervorhebung für viele Programmiersprachen wie C (so unterschiedlichen Text in Ihrem Programm wird in unterschiedlichen Farben dargestellt , seine Bedeutung zu bezeichnen), die eine praktische Funktion und macht einen Texteditor viel bequemer und benutzerfreundlich für Programmierung als ein Textverarbeitungsprogramm.

Dies kann Ubuntu-spezifisch sein, wenn Sie an einen Texteditor auf einer anderen Plattform gewöhnt sind, der eingefügte Anführungszeichen automatisch auf die nicht ausgefallene Version reduziert. Diese Frage wird jedoch möglicherweise geschlossen und auf Stack Overflow migriert .

Eliah Kagan
quelle
Problem gelöst. Mein Programm ist kompiliert. Tanx viel
Zahid
1

Mit dem sedBefehl können Sie diese Probleme beheben.

Dies gibt Ihnen eine schnelle Vorschau auf das, was ersetzt wird.

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

Dadurch werden die Ersetzungen durchgeführt und die Ersetzung in eine neue Datei mit dem Namen WithoutSmartQuotes.txt:

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

Dadurch wird die Originaldatei überschrieben:

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