JavaScript is required

Trong các khởi tạo giá trị cho các cấu trúc sau, hãy chọn câu đúng: struct S1 { int ngay, thang, nam; }; S1 = (2, 1, 3); struct S2 { char hoten[10] struct S1 ngaysinh; }; S2 = { “ Ly Ly”, { 4, 5, 6 } };

A.

S1 đúng

B.

S2 đúng

C.

S1 và S2 đều đúng

D.

S1 và S2 đều sai

Trả lời:

Đáp án đúng: B


Phân tích câu hỏi:

Câu hỏi này kiểm tra kiến thức về cách khởi tạo giá trị cho các biến cấu trúc (struct) trong C hoặc C++. Cần xem xét cú pháp và quy tắc khởi tạo cho từng thành phần của cấu trúc.

Đánh giá các phương án:

  • S1 = (2, 1, 3); Cách khởi tạo này không đúng cú pháp trong C/C++. Khi khởi tạo một struct, ta cần sử dụng cú pháp khởi tạo danh sách (initializer list) với dấu ngoặc nhọn {}.
  • S2 = { “ Ly Ly”, { 4, 5, 6 } }; Cấu trúc S2 có một mảng ký tự hoten và một cấu trúc S1 ngaysinh. Cách khởi tạo này cũng không đúng. Thứ nhất, chuỗi "Ly Ly" (với khoảng trắng ở đầu) có 7 kí tự (6 kí tự + \0), do đó sẽ gây ra lỗi tràn bộ nhớ khi gán vào mảng hoten có kích thước 10. Thứ hai, cần sử dụng strcpy để gán chuỗi.

Kết luận:

Vì cả hai cách khởi tạo S1 và S2 đều sai, đáp án đúng là D.

Câu hỏi liên quan