Cppcheck đã phát hiện một vấn đề tiềm ẩn trong một mã như thế này:Làm cách nào để đọc số bằng sscanf?
float a, b, c;
int count = sscanf(data, "%f,%f,%f", &a, &b, &c);
Nó nói rằng: "scanf không có giới hạn chiều rộng lĩnh vực có thể sụp đổ với dữ liệu khổng lồ". Làm thế nào là có thể? Có phải đó là một lỗi đã biết trong một số triển khai sscanf? Tôi hiểu rằng các con số có thể tràn (số lượng), nhưng làm thế nào chương trình có thể sụp đổ? Đó có phải là dương tính giả trong cppcheck không?
Tôi đã tìm thấy câu hỏi tương tự: scanf Cppcheck warning, nhưng câu trả lời không hoàn toàn thỏa mãn. Câu trả lời đề cập đến an toàn loại, nhưng đó không phải là vấn đề ở đây.
Hãy thử sscanf_s thay thế. Như scanf bình thường, sscanf không tràn an toàn. – guitarflow
@guitarflow: Vấn đề là tôi không thấy nơi nó có thể tràn. –
@guitarflow Hoặc không. 'sscanf_s' không di động và cũng không thực sự an toàn, bất chấp tên và gợi ý của Microsoft. –