Ошибка SystemC, с использованием Visual C ++ 2008 - PullRequest
0 голосов
/ 28 января 2012

Я использую systemC с Visual C ++ 2008. Я написал простую программу hello world. Однако я получаю эту ошибку неоднократно:

предупреждение C4996: 'sprintf': эта функция или переменная могут быть небезопасны.

Почему это происходит? Буду признателен за любую помощь.

Ответы [ 2 ]

4 голосов
/ 28 января 2012

Компилятор предупреждает против использования sprintf(), потому что это может вызвать переполнение буфера, так как он не проверяет ограничение буфера. Вместо этого используйте snprintf(), который никогда не заполняет буфер за пределами переданного предела.

Этот совет также дает manpage :

Поскольку sprintf () и vsprintf () предполагают произвольно длинную строку, вызывающие должны быть осторожно, чтобы не переполнить реальное пространство; это часто невозможно гарантировать. Обратите внимание, что длина создаваемых строк зависит от локали и ее трудно предсказать. использование взамен snprintf () и vsnprintf () (или asprintf (3) и vasprintf (3)).

0 голосов
/ 28 января 2012

Это небезопасно, потому что - От MSDN

Нет способа ограничить количество написанных символов, что означает, что код, использующий sprintf, подвержен переполнению буфера. Подумайте об использовании связанной функции _snprintf, которая задает максимальное количество символов для записи в буфер, или используйте _scprintf, чтобы определить, какой размер буфера требуется. Также убедитесь, что формат не является определяемой пользователем строкой.

...