Зелёное подчеркивание String may not be zero terminated

После ввода следующего кода:

#include <iostream>
#include <cstdlib>
#include <cstring>
int main()
{
char s1[80], s2[80];

std::cout << "Enter two lines: ";

gets_s(s1); gets_s(s2);

std::cout << "Their lenghts equal: "<< strlen(s1);
std::cout << ' ' << strlen(s2) << '\n';

if (!strcmp(s1, s2))
    std::cout << "Lines are equal \n";
else std::cout << "Lines are not equal \n";

strcat_s(s1, s2);
std::cout << s1 << '\n';

strcpy_s(s1, s2);
std::cout << s1 << " & " << s2 << ' ';
std::cout << "Now equal\n";
return 0;
}

В Visual Studio получаю : введите сюда описание изображения

Запускается , вроде нормально, но смущает подчёркивание

Как исправить?


Ответы (1 шт):

Автор решения: Pekor

https://docs.microsoft.com/ru-ru/cpp/code-quality/c6054?view=msvc-170 .

Это предупреждение означает, что для функции, требующей строку, завершающуюся нулем, была передана строка, не завершающаяся нулем. Функция, которая ожидает строку, завершающуюся нулем, может искать ноль за концом буфера. Эта ошибка может привести к ошибке переполнения буфера или сбою злоумышленника. Программа должна убедиться, что передаваемая строка заканчивается нулем.

Чтобы исправить это предупреждение, перед вызовом функции следует завершать s1 и s2 нулем что-то типо: s1[79] = '\0';

→ Ссылка