Which of the following reads in a string named x with one hundred characters?
Trả lời:
Đáp án đúng: B
Câu hỏi này kiểm tra kiến thức về cách đọc một chuỗi từ đầu vào chuẩn (stdin) trong C/C++. Chúng ta cần tìm hàm nào đọc được một chuỗi có 100 ký tự.
\nPhân tích các phương án:
\n- \n
- A. fgets(x, 101, stdin);: Hàm
fgets
đọc tối đan-1
ký tự từ luồng đầu vào, trong đón
là tham số thứ hai. Trong trường hợp này,fgets(x, 101, stdin)
sẽ đọc tối đa 100 ký tự từstdin
và lưu vào chuỗix
. Nếu gặp ký tự newline (\n
), nó cũng sẽ được đọc và lưu vào chuỗi. Chuỗi kết quả sẽ luôn được kết thúc bằng ký tự null (\0
). Đây là phương án đúng. \n - B. fgets(x, 100, stdin);: Hàm
fgets(x, 100, stdin)
sẽ đọc tối đa 99 ký tự từstdin
. Điều này không đáp ứng yêu cầu đọc 100 ký tự. \n - C. readline(x, 100, ‘\\n’);: Hàm
readline
không phải là một hàm chuẩn trong C/C++. Vì vậy, phương án này không đúng. \n - D. read(x);: Hàm
read
là một hàm hệ thống (system call) thường được sử dụng để đọc dữ liệu từ một file descriptor (ví dụ: file, socket). Nó không tự động thêm ký tự null (\0
) vào cuối chuỗi, và việc sử dụng nó trực tiếp để đọc chuỗi có thể gây ra lỗi tràn bộ đệm nếu không được xử lý cẩn thận. Hơn nữa, cú phápread(x)
không đầy đủ; cần chỉ rõ số byte cần đọc và file descriptor. \n
Kết luận:
\nPhương án A là đúng vì nó sử dụng hàm fgets
để đọc tối đa 100 ký tự từ đầu vào chuẩn và lưu vào chuỗi x
, đồng thời đảm bảo chuỗi kết thúc bằng ký tự null.