Missing null in string array

Строка не заканчивается символом null

Описание

Этот дефект возникает, когда в строке недостаточно пространства для завершения с использованием символа null '\0'.

Этот дефект применяется только к проектам в С.

Риск

Переполнение буфера может произойти, если вы скопируете строку в массив, не принимая неявный null terminator.

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

Если вы инициализируете символьный массив с литералом, избегайте задавать границы массива.

char three[]  = "THREE";
Компилятор автоматически выделяет пространство для нулевого терминатора строки. В предыдущем примере компилятор выделяет достаточное пространство для пяти символов и null terminator.

Если проблема возникает после инициализации, вам, возможно, придется увеличить размер массива на единицу, чтобы принять во внимание null terminator.

При определенных обстоятельствах можно хотеть инициализировать символьный массив с последовательностью символов вместо строки. В этой ситуации добавьте комментарии к своему результату или коду, чтобы избежать другого обзора. Смотрите Адрес Результаты Polyspace через исправления ошибок или обоснования.

Примеры

расширить все

void countdown(int i)
{
    static char one[5]   = "ONE";
    static char two[5]   = "TWO";
    static char three[5] = "THREE";
}

Область символьного массива three имеет размер 5 и 5 символов 'T', 'H', 'R', 'E', и 'E'. В конце нет места для символа null, потому что three всего пять байтов.

Коррекция - увеличение размера массива

Одной из возможных коррекций является изменение размера массива, позволяющее использовать пять символов плюс символ null.

void countdown(int i)
{
    static char one[5]   = "ONE";
    static char two[5]   = "TWO";
    static char three[6] = "THREE";
}
Коррекция - метод инициализации изменений

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

void countdown(int i)
{
    static char one[5]   = "ONE";
    static char two[5]   = "TWO";
    static char three[]  = "THREE";
}

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

Группа: Программирование
Язык: C
По умолчанию: On для рукописного кода, off для сгенерированного кода
Синтаксис командной строки: MISSING_NULL_CHAR
Влияние: Низкое
ИДЕНТИФИКАТОР CWE: 170
Введенный в R2013b