Đọc ghi mảng vào file nhị phân trong C++
mình có chương trình bên trái ảnh là chương trình ghi
bên phải ảnh là chương trình đọc
trục trặc ở chỗ là khi
int mang [] = {1,2,3,4,5};
để trong hàm ghi();
thì dữ liệu mới được ghi vào file
còn để ở hàm main thì dữ liệu ghi vào file là giá trị rác
prototype của phương thức write(buff, n)
buff là 1 con trỏ kiểu char hoặc địa chỉ của 1 kí tự,
n là số byte ghi vào
trường hợp này mình truyền biến mảng mang vào hàm ghi();
nhưng hình như
ghi.write((char *)&mang, sizeof(mang));
có lỗi
lỗi ở đâu nhỉ
@@ đúng là vậy thật thế mình đổi thành , sizeof(int) * 5 nhưng vẫn bị lỗi
ra là lấy sizeof() sau khi ép kiểu nên bị sai
// sửa, k phải do casting?
nhưng tại sao như ct này để mang ở trong hàm ghi
cũng casting trước rồi mới lấy sizeof mà nó vẫn được 20 nhỉ
tại
sizeof(x)
trả về kích cỡ tính theo byte củax
.mang
là mảng 5 int thì nó có size của nó là 20 bytes đúng rồi.sizeof()
được đánh giá trong khi biên dịch, trường hợp ít khi chạy mới đánh giá. Có thể coi nó là 1 macro chứ ko phải 1 hàm. Khi biên dịchsizeof(mang)
thì trình dịch nó biếtmang
là int[5] nên nó thếsizeof(mang)
thành số 20.còn nếu truyền mảng vào hàm, thực tế là truyền con trỏ chứ ko phải mảng, nên cách tính size của mảng nó khác: