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 } };
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.