Missing null in string array

Строка не завершает работу с нулевым символом

Описание

Этот дефект происходит, когда строка не имеет достаточного количества пробела, чтобы отключить с нулевым символом '\0'.

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

Риск

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

Фиксация

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

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

Если проблема происходит после инициализации вам придется увеличить размер массива одним с учетом пустого терминатора строки.

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

Примеры

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

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

Символьный массив three имеет размер 5 и 5 символов 'T'HRE, и 'E'. Нет никакого места для нулевого символа в конце потому что three только пять байтов шириной.

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

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

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
Значение по умолчанию: На для рукописного кода, прочь для сгенерированного кода
Синтаксис командной строки: MISSING_NULL_CHAR
Удар: низко
ID CWE: 170
Введенный в R2013b