Có lẽ tôi chỉ là quá đổ googling, nhưng tôi luôn luôn nghĩ mảng char nhận được chỉ null chấm dứt bởi một khởi tạo chữ (char x[]="asdf";
) và có một chút ngạc nhiên khi tôi thấy rằng điều này có vẻ không phải là trường hợp.Có phải tất cả các mảng char tự động bị hủy không?
int main()
{
char x[2];
printf("%d", x[2]);
return 0;
}
Output: 0
nên không phải là một mảng khai báo là size = 2 * char thực sự có được kích thước của 2 ký tự? Hay tôi đang làm gì sai ở đây? Tôi có nghĩa là nó không phải là không phổ biến để sử dụng một mảng char như là một mảng char đơn giản và không phải là một chuỗi, hay là nó?
Tôi cũng đã nghĩ về điều đó, vì vậy tôi cố gắng tạo mảng với các kích thước khác nhau và mảng luôn được theo sau là 0. (số 0 được hiển thị trong mẫu của tôi không được theo sau bởi 0, mà là mảng có kích thước 3 * char tại cùng một vị trí là) – user1329846
@ user1329846: Bất cứ thứ gì được lưu trữ trong bộ nhớ sau khi kết thúc mảng là tới trình biên dịch, bạn nhận được 0 nhưng cũng có thể nhận được bất kỳ số nào khác như tiêu chuẩn nói nếu bạn cố gắng đọc vị trí tất cả các phiên cược bị tắt. Hãy để tôi làm rõ điều này: ngay cả khi bạn may mắn luôn nhận được 0 ở đó, mã của bạn vẫn kích hoạt _undefined behavior_ và có thể không thành công bất cứ lúc nào. –
Cảm ơn bạn đã không sử dụng bất cứ điều gì có thể xảy ra, ngay cả máy tính của bạn có thể tự đặt lửa. Không, nó không thể. Và tất cả những ví dụ tuyệt vời đó chỉ là ngu xuẩn. – jn1kk