Як виправити помилки компіляції, в яких згадуються "бродячий" \ 342 "" та "бродячий" \ 200 ""? [зачинено]


9

Я написав цю програму:

#include<stdio.h>
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

Як я можу виправити цю проблему?


Ви скопіювали цю програму з якогось іншого текстового процесора чи документа, наприклад, офісу Libre чи Microsoft Word?
jobin

якщо ви скопіювали код звідкись, то перепишіть його самостійно, оскільки код, який ви скопіювали, може містити в ньому деякі небажані коди.

Відповіді:


13

Проблема полягає в тому, що замість лапок ASCII у вас є лапки Unicode; ймовірно, ваш редактор автоматично їх змінив, або ви скопіювали текст з сайту, який робить це автоматично в своєму програмному забезпеченні для створення авторських прав. Замініть лапки звичайною котировкою ASCII (0x22, "), і вона повинна працювати.

Виправлене джерело:

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

+1 Мені було цікаво, як він отримав ці цитати назад / вперед.
Аарон

Unicode vs ASCII лапки можуть бути не найкращим способом констатувати відмінність, оскільки правильні лапки для рядків у C ( ") також є символами Unicode. (Вони також є персонажами ASCII, але коли хтось обирає між ними, їхній файл, ймовірно, зберігається у якомусь форматі Unicode. У Unix-подібній системі, як правило, UTF-8.)
Елія Каган

Інші підступні символи замість цього -.
Тревор Бойд Сміт

2

Ви вкладаєте рядок у неправильні лапки.

Ти маєш:

Hello World\n

Натомість ви повинні мати:

"Hello World\n"

Хоча цитати, які ви використовували, виглядають схожими, компілятор C не розпізнає їх як додавання рядка. Таким чином, ви отримуєте повідомлення про помилки щодо нерозпізнаних символів Unicode, і ви отримуєте повідомлення про помилки, що показують, що вміст рядка інтерпретується як не цитований код програми.

Ви зауважите, що використовувані цитати мають окремі символи для початку та закінчення цитати (вони вигнуті так, як цитати часто набираються). Багато текстових процесорів - як запропонував Джобін - автоматично перетворять прості "лапки в такі вигадливі лапки. Якщо ви використовуєте текстовий процесор для складання програм C, замість цього слід скористатися текстовим редактором.

Ubuntu поставляється з geditвстановленим за замовчуванням (хоча також можна вибрати багато інших текстових редакторів). Як і багато інші текстові редактори, geditзабезпечує підсвічування синтаксису для багатьох мов програмування , включаючи C (так інший текст в програмі буде показано в різних кольорах , щоб показати його значення), яка є зручною функцією і робить текстовий редактор набагато зручнішим і зручним для користувача для програмування, ніж текстовий процесор.

Це може бути специфічно для Ubuntu, якщо ви звикли до текстового редактора на іншій платформі, який автоматично зменшує вставлені позначки лапок до не-фантазійної версії. Але це питання може закінчитися закриттям та переходом до стека переповнення .


Проблема вирішена. програма складена.tanx alot
Захід

1

Ви можете скористатися 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.