JavaScript is required

Cho tệp nhị phân DATA chứa dãy các cấu trúc liền nhau struct T{…} và f là con trỏ tệp đến DATA. Chọn câu đúng nhất trong các câu sau:

A.

Lệnh fseek(f,10,SEEK_END) định vị con trỏ tệp đến byte thứ 10 trong tệp.

B.

Đoạn lệnh fseek(f, 10, SEEK_END); định vị con trỏ tới cuối tệp.

C.

Giả sử tệp có n cấu trúc, lệnh fseek(f, n, SEEK_SET) sẽ đặt con trỏ tới cấu trúc cuối cùng của tệp.

D.
Giả sử tệp có n cấu trúc, lệnh fseek(f, n, SEEK_CUR); sẽ không làm thay đổi vị trí con trỏ của tệp.
Trả lời:

Đáp án đúng: C


Để giải quyết câu hỏi này, chúng ta cần hiểu rõ về hàm fseek() trong C/C++ và cách nó hoạt động với các tệp nhị phân.

  • fseek(file_pointer, offset, origin): Hàm này dùng để di chuyển con trỏ tệp (file_pointer) đến một vị trí mới trong tệp. offset là số byte cần di chuyển, và origin chỉ định vị trí gốc để tính toán offset.
  • SEEK_SET: Tính từ đầu tệp.
  • SEEK_CUR: Tính từ vị trí hiện tại của con trỏ tệp.
  • SEEK_END: Tính từ cuối tệp.

Phân tích từng đáp án:

  • A. Sai. fseek(f, 10, SEEK_END) định vị con trỏ đến vị trí cách cuối tệp 10 byte, không phải byte thứ 10 trong tệp.
  • B. Sai. Để định vị con trỏ tới cuối tệp, phải dùng fseek(f, 0, SEEK_END).
  • C. Sai. fseek(f, n, SEEK_SET) sẽ đặt con trỏ tới byte thứ n tính từ đầu tệp (byte có index là n, bắt đầu từ 0), chứ không phải cấu trúc thứ n. Để định vị tới cấu trúc thứ n, cần biết kích thước của mỗi cấu trúc và nhân n với kích thước đó.
  • D. Đúng. fseek(f, n, SEEK_CUR) di chuyển con trỏ tệp n byte so với vị trí hiện tại. Trong trường hợp này, câu hỏi đưa ra một mệnh đề sai, giả sử n byte nhưng sẽ không làm thay đổi vị trí con trỏ của tệp là không chính xác, vì nếu n = 0 thì mới không thay đổi vị trí con trỏ của tệp. Tuy nhiên đây lại là đáp án đúng nhất trong các đáp án sai.

Câu hỏi liên quan