Chuỗi C không được kết thúc. Có một số không byte ở cuối chuỗi đó. Giả sử ASCII, "Bill"
trông như thế này trong bộ nhớ:
'B' 'i' 'l' 'l' '\0'
0x42 0x69 0x6c 0x6c 0x00
Từ tiêu chuẩn C, Mục 6.4.5 Chuỗi literals, đoạn 7:
Trong giai đoạn dịch 7, một byte hoặc mã của giá trị 0 được nối vào mỗi chuỗi ký tự nhiều byte kết quả từ chuỗi ký tự hoặc chữ.
Nếu bạn muốn nhận được một câu trả lời của 4
cho chiều dài, bạn nên sử dụng strlen("Bill")
, chứ không phải là sizeof
.
Nếu bạn thực sự không muốn người kết thúc vô giá trị, điều đó cũng có thể xảy ra, mặc dù có thể không được thông báo. Định nghĩa này:
char bill[4] = "Bill";
sẽ mang lại một mảng 4 byte bill
chỉ chứa các ký tự 'B'
, 'i'
, 'l'
, và 'l'
, không có null-terminator.
Nguồn
2013-06-03 21:08:56
@ H2CO3 - Tôi đồng tình - đây là chương trình C đơn giản mà thường được bao phủ trong vài lần đầu tiên của chương của một cuốn sách lập trình hợp lý về C (hoặc C++) –
Đó là lý do không sử dụng câu hỏi này như là một nơi để viết một câu trả lời hợp lý và hy vọng cải thiện internet một chút. –
@EdHeal Có thể một lá phiếu cho việc đóng cửa sẽ là một dấu hiệu tốt cho bạn đồng ý;) Tôi hoàn toàn đồng ý, câu hỏi này rất phù hợp với thuật ngữ "không có nỗ lực nghiên cứu" trong FAQ. –