Bagaimana cara memperbaiki kesalahan kompilasi yang menyebutkan “nyasar '\ 342'” dan “nyasar '\ 200'”? [Tutup]

9

Saya menulis program ini:

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

Saya menyimpannya sebagai first.cdan mencoba mengkompilasi tetapi menerima masalah ini saya telah menginstal kompiler gcc juga.

$ 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

Bagaimana saya bisa memperbaiki masalah ini?

Zahid
sumber
Apakah Anda menyalin program ini dari pengolah kata atau dokumen lain seperti Libre office atau Microsoft Word?
jobin
jika Anda telah menyalin kode dari suatu tempat kemudian menulis ulang kode Anda sendiri karena kode yang telah Anda salin mungkin memiliki beberapa kode yang tidak diinginkan tertanam di dalamnya.

Jawaban:

13

Masalahnya adalah Anda memiliki tanda kutip Unicode alih-alih tanda kutip ASCII; mungkin editor Anda secara otomatis mengubahnya, atau Anda menyalin teks dari situs yang melakukan ini secara otomatis dalam perangkat lunak pembuatnya. Ganti kutipan dengan kutipan ASCII normal (0x22, ") dan itu akan berfungsi.

Sumber tetap:

#include <stdio.h>
int main()
{
    printf("Hello World\n");
    return 0;
}
Krzysztof Kosiński
sumber
+1 Saya bertanya-tanya bagaimana dia mendapatkan kutipan back / forward di sana.
Aaron
Tanda kutip Unicode vs. ASCII mungkin bukan cara terbaik untuk menyatakan perbedaan, karena tanda kutip yang benar untuk string dalam C ( ") adalah karakter Unicode juga. (Mereka juga merupakan karakter ASCII tetapi setiap kali seseorang memilih di antara keduanya, file mereka mungkin disimpan dalam beberapa format Unicode. Pada sistem mirip Unix, biasanya UTF-8.)
Eliah Kagan
karakter licik lainnya adalah bukan -.
Trevor Boyd Smith
2

Anda melampirkan string Anda dalam jenis kutipan yang salah.

Kamu punya:

Hello World\n

Anda seharusnya memiliki:

"Hello World\n"

Meskipun kutipan yang Anda gunakan terlihat serupa, mereka tidak dikenali oleh kompiler C sebagai melampirkan string. Dengan demikian, Anda mendapatkan pesan kesalahan tentang karakter Unicode yang tidak dikenali, dan Anda mendapatkan pesan kesalahan yang menunjukkan bahwa isi string sedang ditafsirkan sebagai kode program yang tidak dikutip.

Anda akan mencatat bahwa tanda kutip yang Anda gunakan memiliki karakter yang terpisah untuk memulai dan mengakhiri kutipan (mereka melengkung seperti tanda kutip sering mengeset). Banyak pengolah kata - seperti yang disarankan Jobin - akan secara otomatis mengubah "kutipan sederhana menjadi tanda kutip mewah. Jika Anda menggunakan pengolah kata untuk membuat program C, Anda harus menggunakan editor teks.

Ubuntu dilengkapi dengan yang geditterinstal secara default (walaupun ada banyak editor teks lain untuk dipilih juga). Seperti banyak editor teks, geditmenyediakan penyorotan sintaks untuk banyak bahasa pemrograman termasuk C (jadi teks yang berbeda dalam program Anda akan ditampilkan dalam warna yang berbeda untuk menandakan artinya), yang merupakan fitur yang berguna dan membuat editor teks jauh lebih nyaman dan ramah pengguna untuk pemrograman dari pengolah kata.

Ini mungkin khusus Ubuntu, jika Anda terbiasa dengan editor teks pada platform lain yang secara otomatis mengurangi tanda kutip yang ditempelkan ke versi yang tidak mewah. Tetapi pertanyaan ini mungkin akhirnya ditutup dan dimigrasi ke Stack Overflow .

Eliah Kagan
sumber
masalah diselesaikan. program saya dikompilasi.tanx banyak
Zahid
1

Anda dapat menggunakan sedperintah untuk memperbaiki masalah ini.

Ini akan memberi Anda pratinjau cepat tentang apa yang akan diganti.

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

Ini akan melakukan penggantian dan menempatkan penggantian dalam file baru bernama WithoutSmartQuotes.txt:

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

Ini akan menimpa file asli:

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