Làm cách nào để sửa lỗi biên dịch có đề cập đến việc đi lạc '\ 342' và đi lạc '\ 200'? [đóng cửa]


9

Tôi đã viết chương trình này:

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

Tôi đã lưu nó first.cvà cố gắng biên dịch nhưng nhận được vấn đề này, tôi cũng đã cài đặt trình biên dịch 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

Làm thế nào tôi có thể khắc phục vấn đề này?


Bạn đã sao chép chương trình này từ một số trình xử lý văn bản hoặc tài liệu khác như Libre office hay Microsoft Word chưa?
việc

nếu bạn đã sao chép mã từ một nơi nào đó thì hãy tự viết lại mã dưới dạng mã mà bạn đã sao chép có thể có một số mã không mong muốn được nhúng trong đó.

Câu trả lời:


13

Vấn đề là bạn có dấu ngoặc kép Unicode thay vì dấu ngoặc kép ASCII; có thể trình soạn thảo của bạn tự động thay đổi chúng hoặc bạn đã sao chép văn bản từ một trang web tự động làm điều này trong phần mềm tác giả của nó. Thay thế các trích dẫn bằng trích dẫn ASCII bình thường (0x22, ") và nó sẽ hoạt động.

Nguồn cố định:

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

+1 Tôi đã tự hỏi làm thế nào anh ta có được những trích dẫn trở lại / chuyển tiếp trong đó.
Aaron

Dấu ngoặc kép Unicode so với ASCII có thể không phải là cách tốt nhất để nêu rõ sự khác biệt, vì dấu ngoặc kép chính xác cho chuỗi trong C ( ") cũng là ký tự Unicode. (Họ cũng xảy ra được các ký tự ASCII nhưng bất cứ lúc nào có ai đó đang lựa chọn giữa hai, tập tin của họ có lẽ được lưu trong một số định dạng Unicode Trên Unix như hệ thống, thường là UTF-8..)
Eliah Kagan

nhân vật lén lút khác là thay vì -.
Trevor Boyd Smith

2

Bạn đang đặt chuỗi của bạn trong loại trích dẫn sai.

Bạn có:

Hello World\n

Thay vào đó bạn nên có:

"Hello World\n"

Mặc dù các trích dẫn bạn đã sử dụng trông tương tự nhau, nhưng chúng không được trình biên dịch C nhận ra là kèm theo một chuỗi. Do đó, bạn nhận được thông báo lỗi về các ký tự Unicode không được nhận dạng và bạn nhận được thông báo lỗi cho thấy nội dung của chuỗi đang được hiểu là mã chương trình không được trích dẫn.

Bạn sẽ lưu ý rằng các trích dẫn bạn đã sử dụng có các ký tự riêng để bắt đầu và kết thúc một trích dẫn (chúng được uốn cong theo cách các trích dẫn thường được sắp chữ). Nhiều trình xử lý văn bản - như Jobin đã đề xuất - sẽ tự động biến các "trích dẫn đơn giản thành các dấu ngoặc kép lạ mắt như vậy. Nếu bạn đang sử dụng trình xử lý văn bản để soạn chương trình C, bạn nên sử dụng trình soạn thảo văn bản thay thế.

Ubuntu đi kèm với geditcài đặt theo mặc định (mặc dù cũng có nhiều trình soạn thảo văn bản khác để lựa chọn). Giống như nhiều soạn thảo văn bản, geditcung cấp làm nổi bật cú pháp cho nhiều ngôn ngữ lập trình bao gồm C (văn bản quá khác biệt trong chương trình của bạn sẽ thể hiện trong màu sắc khác nhau để biểu thị ý nghĩa của nó), mà là một tính năng tiện dụng và làm cho một trình soạn thảo văn bản thuận tiện hơn nhiều và người dùng thân thiện cho lập trình hơn một trình xử lý văn bản.

Đây có thể là dành riêng cho Ubuntu, nếu bạn đã sử dụng trình soạn thảo văn bản trên nền tảng khác tự động giảm các dấu ngoặc kép đã dán xuống phiên bản không ưa thích. Nhưng câu hỏi này có thể sẽ bị đóng và chuyển sang Stack Overflow .


vấn đề được giải quyết. chương trình của tôi được biên dịch.tanx rất nhiều
Zahid

1

Bạn có thể sử dụng sedlệnh để khắc phục những vấn đề này.

Điều này sẽ cung cấp cho bạn một bản xem trước nhanh chóng về những gì sẽ được thay thế.

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

Điều này sẽ thực hiện thay thế và đặt thay thế trong một tệp mới gọi là WithoutSmartQuotes.txt:

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

Điều này sẽ ghi đè lên tập tin gốc:

sed -i .bk -re 's/”|“/"/g' File.txt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.