Chào các bạn,
Lập trình viên đối với nhiều người là một nghề khá nhàm chán, chỉ biết code và code. Thực ra, mỗi lập trình viên đều có một kho những chuyện thú vị mà họ khám phá được trong lúc giải quyết những trở ngại gặp phải mỗi ngày. Đôi khi những điều mà bạn nghĩ là đúng bấy lâu nay, khi cần phải áp dụng lại đem đến những bất ngờ ngoài sức tưởng tượng

.
Câu chuyện về struct alignment:Giả sử một ngày đẹp trời bạn được giao lập trình đọc/ghi một tập tin gồm nhiều record, mỗi record có cấu trúc như sau:
4 byte đầu chứa mã số sinh viên (kiểu int)
30 byte sau chứ tên sinh viên (kiểu char)
4 byte cuối chứa mã lớp (kiểu int).
Đọc/ghi tuần tự từng byte thì quá mất thời gian và bạn quyết định đọc toàn bộ file chỉ với 1 vài dòng lệnh. Đầu tiên, bạn khai báo:
CODE
typedef struct tagStudent {
int studentID;
char name[30];
int classID;
} Student;
Sau đó, bạn đọc kích thước tập tin, chia cho sizeof(Student) để ra tổng số record rồi cấp phát một mảng có kiểu Student với số phần tử là số record đã tính được. Cuối cùng, bạn chỉ cần một dòng lệnh read là đưa luôn cả tập tin vào trong mảng.
Mọi việc thật suôn sẻ cho đến khi bạn viết xong chương trình và chạy thử với file sample mà sếp đưa. Hic, trật lất. Rà code đi rà code lại chẳng có gì sai hết mà kết quả thì cứ lung tung beng.
(còn tiếp)