2012-08-25 36 views
18
char* a="dsa" "qwe"; 
printf("%s",a); 

đầu ra: dsaqweLàm cách nào để ghép hai chuỗi ký tự chuỗi hoạt động?

Câu hỏi của tôi là tại sao điều này hoạt động. Nếu tôi đưa ra một không gian hoặc không có gì ở giữa hai chuỗi ký tự, nó nối các chuỗi ký tự.

Cách này hoạt động?

+0

Vui lòng đặt nội dung nào đó vào tiêu đề câu hỏi. Tôi đã chỉnh sửa nó cho bạn, vui lòng xem nó có phù hợp không. –

Trả lời

23

Được xác định theo tiêu chuẩn ISO C, các chuỗi ký tự chuỗi liền kề được kết hợp thành một chữ cái duy nhất.

Ngôn ngữ là một chút khô (nó là một tiêu chuẩn sau khi tất cả) nhưng phần 6.4.5 String literals của C11 khẳng định:

Trong giai đoạn dịch 6, chuỗi ký tự multibyte theo quy định của bất kỳ chuỗi nhân vật liền kề và hệt các mã thông báo dạng chuỗi rộng được mã hóa được ghép nối thành một chuỗi ký tự nhiều byte đơn.

này cũng được đề cập trong 5.1.1.2 Translation phases, point 6, ngắn gọn hơn một chút:

chuỗi liền kề thẻ đen là nối vào nhau.

Điều này về cơ bản có nghĩa là "abc" "def" không khác với "abcdef".

Nó thường hữu ích để làm chuỗi dài trong khi vẫn có định dạng tốt đẹp:

char *myString = "This is a really long " 
       "string and I don't want " 
       "to make my lines in the " 
       "editor too long, because " 
       "I'm basically anal retentive :-)"; 
+0

Không có gì sai với việc là một người keo kiệt để biết chi tiết. –

6

Bạn đã trả lời câu hỏi của riêng mình.

Nếu tôi đưa ra một khoảng trắng hoặc không có gì ở giữa hai chuỗi ký tự, nó sẽ ghép các chuỗi ký tự chuỗi.

Đó là một trong các tính năng của cú pháp C.

-4

Tôi chắc chắn đây là tính năng trình biên dịch.

+2

không phải là một tính năng của trình biên dịch, nó là một tiêu chuẩn ISO. –

+0

... và như vậy, nó được xây dựng trong trình biên dịch. Vì vậy, nó là một tính năng trình biên dịch. –

+0

vui lòng xem câu trả lời được chấp nhận. Và đừng đánh lừa bất cứ ai. Bạn nên đọc một chút về trình biên dịch và kiểm tra thuật ngữ của bạn. –

1

ISO C tiêu chuẩn §5.1.1.2 nói: -

  1. chuỗi liền kề thẻ đen là nối vào nhau.
  2. Ký tự khoảng trắng tách các mã thông báo không còn đáng kể.
+0

Trên thực tế, điều thứ hai có một hoạt động giai đoạn 7, thực hiện _after_ việc kết hợp các chuỗi ký tự chuỗi liền kề trong giai đoạn 6. Tiếp giáp trong ý nghĩa này có nghĩa là bỏ qua không gian trắng anyway. Tuy nhiên, +1 cho cái đầu tiên. – paxdiablo

3

Và để trả lời câu hỏi chưa được giải đáp của bạn, "Điều này tốt cho điều gì?"

Đối với một điều, bạn có thể đặt hằng số trong chuỗi ký tự. Bạn có thể viết

#define FIRST "John" 
#define LAST "Doe" 

const char* name = FIRST " " LAST; 
const char* salutation = "Dear " FIRST ","; 

và sau đó nếu bạn cần thay đổi tên sau này, bạn sẽ chỉ phải thay đổi tên đó tại một chỗ.
Những điều tương tự.

Các vấn đề liên quan