30/09/2018, 22:40
Hỏi về cách ghi dữ liệu kiểu string vào file nhị phân?
Tình hình là mình đang làm một cái danh sách quản lý sv. Tuy nhiên đến phần ghi dữ liệu vào file thì gặp vấn đề.
Mình khai báo một cái cấu trúc
struct sinhvien
{
int maso;
char hoten[10];
};
Khi thao tác đọc ghi với file nhị phân thì không vấn đề gì. Tuy nhiên khi mình đổi char hoten[10] thành string hoten; thì lại gặp lỗi. Mấy bạn giải thích dùm mình chỗ này với.
Phần đọc ghi của mình đại loại thế này
int main()
{
...
file.read(reinterpret_cast< char*>(&sv), sizeof(sihvien));
...
file.write(reinterpret_cast< const char*>(&sv), sizeof(sihvien));
...
}
Chương trình thông báo lỗi Unhendled exception . . .Access violation…
Bài liên quan
sizeof(sinhvien)
là tính cả trường maso vào nữa tất nhiên là sai địa chỉ rồi.Là sao bạn. Mình muốn ghi nguyên cả maso với hoten vào mà. Lúc đầu thì bình thường. Khi chuyển qua string thì bị lỗi.
Mình cũng chưa rõ vấn đề này, nhưng có thể là do bạn chọn phương thức ép kiểu.
When to use reinterpret_cast?
Hình như
reinterpret_cast
không đảm bảo bảo toàn địa chỉ.Mình lượn trên mạng thì thấy hình như nguyên nhân là do cái struct của mình nó chứa string data. Khi thao tác đọc ghi file thực chất là đang thao tác với cái pointer của nó. Không nên đọc ghi file các data structer(class/ struct), đặc biệt không khi nó chứa complex type như string.
This post was flagged by the community and is temporarily hidden.
This post was flagged by the community and is temporarily hidden.