exponenta event banner

Недопустимое использование стандартной библиотечной подпрограммы

Неверные аргументы для стандартной библиотечной функции

Описание

Этот дефект возникает при использовании недопустимых аргументов с функцией из стандартной библиотеки. Этот дефект выявляет ошибки, связанные с другими функциями, не охватываемыми подпрограммами float, integer, memory или строковыми стандартными библиотеками.

Риск

Недопустимые аргументы стандартной библиотечной функции приводят к неопределенному поведению.

Зафиксировать

Исправление зависит от первопричины дефекта. Например, аргумент к printf функция может быть NULL потому что указатель был инициализирован с помощью NULL и значение инициализации не было перезаписано по определенному пути выполнения.

См. примеры исправлений ниже.

Если вы не хотите устранять проблему, добавьте комментарии к результату или коду, чтобы избежать другой проверки. См. раздел Результаты анализа пространства адресов с помощью исправлений ошибок или обоснований.

Примеры

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

#include <stdio.h>
#include <stdlib.h>

void print_null(void) {

  printf(NULL); 
}

Функция printf принимает только входные аргументы строки или спецификаторы формата. В этой функции входное значение равно NULL, что не является допустимой строкой.

Исправление - использовать совместимые входные аргументы

Одной из возможных корректировок является изменение входных аргументов в соответствии с требованиями стандартной библиотечной подпрограммы. В этом примере входной аргумент был изменен на символ.

#include <stdio.h>

void print_null(void) {
    char zero_val = '0';
    printf((const char*)zero_val); 
}

Информация о результатах

Группа: Программирование
Язык: C | C++
По умолчанию: Вкл.
Синтаксис командной строки: OTHER_STD_LIB
Воздействие: Высокое
CWE ID: 227, 690
Представлен в R2013b