exponenta event banner

Правило AUTOSAR C++ 14 M27-0-1

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

Описание

Определение правила

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

Объяснение

Функции в cstdio такие как gets, fgetpos, fopen, ftellи т.д. имеют неопределенное, неопределенное и определяемое реализацией поведение.

Например:

  • gets функция:

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

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

Поиск неисправностей

Если вы ожидаете нарушения правила, но не видите его, обратитесь к разделу Нарушения стандартов кодирования не отображаются.

Примеры

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

#include <cstdio>

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

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

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

Группа: Библиотека входных выходных данных
Категория: Обязательно, Автоматизировано
Представлен в R2019a