E đang tự học C /C++ thì có khi chạy 1 chương trình hỏi tuổi user thì gặp vấn đề là IDE cảnh báo về việc sử dụng scanf thì unsafe và nên dùng scanf_s. Cho e hỏi là tại sao và scanf_s nó khác cái scanf ntn ạ
Scanf và scanf_s
Chỉ khác nhau khi bạn cho nhập chuỗi thôi phải đi kèm độ dài của buffer.
Độ dài của buffer là ntn vậy bác, em mới học nên từ chuyển ngành chưa hiểu lắm
Ví dụ ntn:
char s[22];
scanf_s("%10s", s, 22);
Số 10 không liên quan gì đến 22
Mình vẫn không hiểu về cái buffer , và ý mình hỏi là tại s visual studio lại bảo scanf lại unsafe và recommend là nên dùng scanf_s
Với hàm scanf, bạn phải có trước 1 mảng/buffer với kích thước cố định, ví dụ bạn có 1 buffer có 100 phần tử.
Chuyện gì sẽ xảy ra nếu bạn nhập vào hơn 100 phần tử???
Chính vì thế nên Visual Studio bảo nó unsafe, Microsoft họ làm phiên bản an toàn hơn là scanf_s, phải truyền cả con số độ dài của buffer cho scanf_s, chứ không phó mặc cho trời như scanf.
Tham khảo: https://vi.wikipedia.org/wiki/Lỗi_tràn_bộ_nhớ_đệm
Lưu ý scanf_s và các hàm security khác là của Microsoft, chỉ có SDK của Microsoft mới có, SDK của GNU không có.
Okay thanks bác, mình hiểu r
Nên dùng fgets
vì nó là hàm chuẩn & không vô duyên như scanf_s
Vả lại
scanf_s
sẽ vướng khoảng trắng.