Chỉnh sửa: OP (hoặc một biên tập viên) đã âm thầm thay đổi một số dấu ngoặc kép trong câu hỏi ban đầu thành dấu ngoặc kép tại một số thời điểm sau khi tôi cung cấp câu trả lời này.
Mã của bạn sẽ dẫn đến lỗi trình biên dịch. Đoạn mã đầu tiên của bạn:
char buf[10] ; buf = ''
là bất hợp pháp gấp đôi. Đầu tiên, trong C, không có cái gọi là rỗng char
. Bạn có thể sử dụng dấu ngoặc kép để chỉ định một chuỗi trống, như với:
char* buf = "";
Điều đó sẽ cung cấp cho bạn một con trỏ tới một NUL
chuỗi, tức là một chuỗi ký tự đơn chỉ có NUL
ký tự trong đó. Nhưng bạn không thể sử dụng các dấu ngoặc kép đơn lẻ mà không có gì bên trong chúng - điều đó là không xác định. Nếu bạn cần chỉ định NUL
nhân vật, bạn phải chỉ định nó:
char buf = '\0';
Dấu gạch chéo ngược là cần thiết để phân biệt ký tự '0'
.
char buf = 0;
hoàn thành điều tương tự, nhưng cái đầu tiên là ít mơ hồ hơn để đọc, tôi nghĩ.
Thứ hai, bạn không thể khởi tạo mảng sau khi chúng đã được xác định.
char buf[10];
khai báo và định nghĩa mảng. Định danh mảng buf
bây giờ là một địa chỉ trong bộ nhớ và bạn không thể thay đổi vị trí buf
điểm thông qua phép gán. Vì thế
buf = // anything on RHS
Là bất hợp pháp. Các đoạn mã thứ hai và thứ ba của bạn là bất hợp pháp vì lý do này.
Để khởi tạo một mảng, bạn phải thực hiện tại thời điểm định nghĩa:
char buf [10] = ' ';
sẽ cung cấp cho bạn một mảng 10 ký tự với ký tự đầu tiên là khoảng trắng '\040'
và ký tự còn lại NUL
là ký tự '\0'
. Khi một mảng được khai báo và xác định bằng bộ khởi tạo, các phần tử của mảng (nếu có) nằm sau các phần tử có giá trị ban đầu được chỉ định sẽ tự động được thêm vào 0
. Sẽ không có bất kỳ "nội dung ngẫu nhiên" nào.
Nếu bạn khai báo và xác định mảng nhưng không khởi tạo nó, như sau:
char buf [10];
bạn sẽ có nội dung ngẫu nhiên trong tất cả các phần tử.