Come correggere gli errori di compilazione che menzionano "stray '\ 342'" e "stray '\ 200'"? [chiuso]


9

Ho scritto questo programma:

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

L'ho salvato come first.ce ho provato a compilare ma ricevendo questo problema ho installato anche il compilatore 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

Come posso risolvere questo problema?


Hai copiato questo programma da qualche altro elaboratore di testi o documenti come Libre Office o Microsoft Word?
Jobin

se hai copiato il codice da qualche parte, riscrivi il codice da solo poiché il codice che hai copiato potrebbe contenere alcuni codici indesiderati.

Risposte:


13

Il problema è che hai virgolette Unicode invece di virgolette ASCII; probabilmente il tuo editor li ha cambiati automaticamente o hai copiato il testo da un sito che lo fa automaticamente nel suo software di creazione. Sostituisci le virgolette con le normali virgolette ASCII (0x22, ") e dovrebbe funzionare.

Fonte fissa:

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

+1 Mi chiedevo come avesse ottenuto quelle citazioni avanti / indietro.
Aaron,

Le virgolette Unicode vs. ASCII potrebbero non essere il modo migliore per stabilire la distinzione, poiché anche le virgolette corrette per le stringhe in C ( ") sono caratteri Unicode. ( Capita anche di essere caratteri ASCII, ma ogni volta che qualcuno sceglie tra i due, il loro file viene probabilmente salvato in un formato Unicode. Su un sistema simile a Unix, di solito UTF-8.)
Eliah Kagan

altri personaggi subdoli sono invece di -.
Trevor Boyd Smith,

2

Stai racchiudendo la stringa tra virgolette sbagliate.

Hai:

Hello World\n

Dovresti invece avere:

"Hello World\n"

Mentre le virgolette che hai usato sembrano simili, non sono riconosciute da un compilatore C come racchiuse una stringa. Pertanto, vengono visualizzati messaggi di errore relativi a caratteri Unicode non riconosciuti e vengono visualizzati messaggi di errore che mostrano che il contenuto della stringa viene interpretato come codice di programma non quotato.

Noterai che le virgolette che hai usato hanno caratteri separati per l'inizio e la fine di una citazione (sono curve nel modo in cui le virgolette sono spesso composte). Molti elaboratori di testi - come suggerì Jobin - trasformeranno automaticamente "virgolette semplici in virgolette fantasiose. Se stai utilizzando un elaboratore di testi per comporre programmi C, dovresti invece utilizzare un editor di testo.

Ubuntu viene fornito con l' geditinstallazione predefinita (anche se ci sono molti altri editor di testo tra cui scegliere). Come molti editor di testo, geditfornisce l'evidenziazione della sintassi per molti linguaggi di programmazione tra cui C (quindi testo diverso nel tuo programma verrà mostrato in diversi colori per indicarne il significato), che è una funzione utile e rende un editor di testo molto più comodo e intuitivo per programmazione di un elaboratore di testi.

Questo potrebbe essere specifico di Ubuntu, se sei abituato a un editor di testo su un'altra piattaforma che riduce automaticamente le virgolette incollate alla versione non di fantasia. Ma questa domanda potrebbe finire per essere chiusa e migrata in Stack Overflow .


problema risolto.il mio programma è molto compilato.tanx
Zahid

1

È possibile utilizzare il sedcomando per risolvere questi problemi.

Questo ti darà una rapida anteprima di ciò che verrà sostituito.

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

Ciò eseguirà le sostituzioni e inserirà la sostituzione in un nuovo file chiamato WithoutSmartQuotes.txt:

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

Questo sovrascriverà il file originale:

sed -i .bk -re 's/”|“/"/g' File.txt
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.