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…

... viết 00:44 ngày 01/10/2018

sizeof(sinhvien) là tính cả trường maso vào nữa tất nhiên là sai địa chỉ rồi.

Lê Văn Đức viết 00:46 ngày 01/10/2018

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.

... viết 00:50 ngày 01/10/2018

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.

stackoverflow.com
HeretoLearn

When to use reinterpret_cast?

c++, casting
asked by HeretoLearn on 04:12PM - 21 Feb 09

Hình như reinterpret_cast không đảm bảo bảo toàn địa chỉ.

Lê Văn Đức viết 00:43 ngày 01/10/2018

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.

Tao Không Ngu. viết 00:48 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Tao Không Ngu. viết 00:51 ngày 01/10/2018

This post was flagged by the community and is temporarily hidden.

Bài liên quan
0