Hỏi vê fread() trong C và read() trong C++

Chào các anh chị, em mới học phần đọc ghi file nhị phân C/C++ nên có 1 chút khó hiểu.

  1. size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
  • ptr− Đây là con trỏ tới một khối bộ nhớ với kích cỡ tối thiểu là size*nmemb byte.
  • size − Đây là kích cỡ (giá trị byte) của mỗi phần tử được đọc.
  • nmemb − Đây là số phần tử, với mỗi phần tử có kích cỡ là size byte.
  • stream − Đây là con trỏ tới một đối tượng FILE mà xác định một Input Stream.

Em muốn hỏi là nmemb ở đây có tác dụng gì, vì các BT em làm hầu như chỉ viết là nmemb=1 trong khi đó hàm read(buf, BUF_SIZE); trong C++ ko cần thiết phải có nmemb (số phần tử) vẫn dùng được. Thì nếu dùng hàm read() có có bị hạn chế gì khi ko dùng nmemb ko?


Em dùng fread() để đọc 4 byte vào biến int32_t x thì được. Vậy có cách nào để dùng fi.read() để đọc 4 byte vào y ko ạ. Đây có phải là hạn chế của read() cho với fread() ko ạ?
Em đã tra google nhưng vẫn còn chút thắc mắc. Mong các anh giúp đỡ. EM cảm ơn ạ

  1. Vì bạn chỉ đọc 1 biến đơn, hàm còn thiết kế cho việc đọc vào mảng cấu trúc.
  2. Xem đặc tả cho istream.read() nhé:
    http://www.cplusplus.com/reference/istream/istream/read/
    Tham số thứ nhất kiểu char*, bạn lại truyền kiểu int32_t*. Sai kiểu sao nó chấp nhận!
1 Like
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?