Недостающий пустой указатель в массиве строк

Строка не останавливается с нулевым символом

Описание

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', 'H', 'R', 'E' и '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