MISRA C++:2008 Rule 27-0-1

Потоковый ввод / выходная библиотека <cstdio> не должен использоваться

Описание

Управляйте определением

Потоковый ввод / выходная библиотека <cstdio> не должен использоваться.

Объяснение

Функции в cstdio такой как gets, fgetposfopenftell, и т.д. имейте незаданное, неопределенное и заданное реализацией поведение.

Например:

  • gets функция:

    char * gets ( char * buf );
    не проверяет, ввело ли количество символов, обеспеченных в стандарте, превышает буферный buf. Функция может иметь неожиданное поведение, когда вход превышает буфер.

  • fopen функции связали специфичное для реализации поведение с тем, устанавливает ли это errno при ошибках или принимает ли это дополнительные символы после спецификаторов стандартного режима.

Поиск и устранение проблем

Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.

Примеры

развернуть все

#include <cstdio>

void func()
{
    char array[10];
    fgets(array, sizeof array, stdin); //Noncompliant
}

Использование fgets нарушает это правило.

Проверяйте информацию

Группа: Библиотека ввода/вывода
Категория: необходимый
Введенный в R2013b