powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2017: отсутствуют сообщения о небезопасных строковых функциях
28 сообщений из 28, показаны все 2 страниц
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807543
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

Создаю два пустых проекта: одно консольное приложение Win32, а другое Qt приложение. Компиляция одного и того же кода в консольном приложении выдаёт предупреждения о небезопасных функциях, а в Qt приложении не выдаёт. Вот код (полный код файла main.cpp), он одинаковый в обоих проектах:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#include <cstdio>
#include <cstring>

int main()
{
    extern char *b;

    sprintf(b, "%d", 6);
    strcpy(b, "123");
}



Конечно, в настройках проектов нет отключения предупреждений и нет определения макросов наподобие _CRT_SECURE_NO_WARNINGS. Но *компилируются* файлы по разному. Обратите внимание, даже в Qt-проекте в main.cpp отключены заголовочники самого Qt. На закладке Property Manager тоже всё идентично.

Почему?!
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807555
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, в Qt приложении уровень предупреждений был 1. Но это не решает такой же проблемы в боевом Qt проекте, там уровень предупреждений стоит 3.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807557
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Какими пунктами в меню создал проект?
Я Qt Creater юзаю.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807560
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

В Студии меню: File - New - Project - Qt - Qt GUI Application.

Где-то я упускаю мелочь какую-то. В исходных кодах боевого проекта предупреждения не отключаются, уровень предупреждений три, но нет самих предупреждений. Точнее они есть, но не для всех строковых функций.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807569
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Нету п.п. Qt.
Что надо сделать?
Qt поставил.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807575
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123,

Поставить расширение Студии "Qt VS Tools".

Но это уже не нужно, на тестовом проекте Qt предупреждения уже у меня есть. Я понять понять не могу почему их нет в боевом проекте Qt. Причем для функции sprintf() предупреждений нет, а для функции vsprintf() они есть - при компиляции одного и того же файла:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
void simpleTest(char *frmt, ...)
{
    extern char *b;

    sprintf(b, "%d", 6); // <--- No warning!
    strcpy(b, "123"); // <--- No warning!

    va_list args = {};
    va_start(args, frmt);
    vsprintf(b, frmt, args); // <--- warning C4996.
    va_end(args);
}



Ну как так?
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807585
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так же для vsprintf() не срабатывает замена на безопасный шаблон, хотя буфер в функцию передаётся статического размера (локальных массив char), а в проекте определено _CRT_SECURE_CPP_OVERLOAD_STANDARD_NAMES=1

При этом такая замена срабатывает для функции vsprintf_s(). Но для обоих этих функций есть ведь шаблонный вариант с автовыводом размера буфера.

Глючит тут что-то...
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807603
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
А не видели такой рекомендации, под Qt использовать больше код библиотеки и меньше код С++?
Это имхо, так как я не сишник.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807671
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123petrav,
А не видели такой рекомендации, под Qt использовать больше код библиотеки и меньше код С++?
Это имхо, так как я не сишник.
Видел. Но я глубоко не согласен с такой рекомендацией. Логику программы я стараюсь писать на С++.

А тут речь вообще про старый Си-код, который переписывать не слишком оправдано... по многим причинам. Я стараюсь сделать его как можно более надёжным, он не очень хорошо написан. Но варнинги подвели пока что.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807686
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Dll сделай с логикой.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807688
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Иначе будет мешанина из QString и char.
Imho
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807740
Ролг Хупин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123petrav,
А не видели такой рекомендации, под Qt использовать больше код библиотеки и меньше код С++?
Это имхо, так как я не сишник.

обана! разочаровываешь
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807752
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
)) это ненадолго)
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807755
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ролг Хупин,
Ну и интуиция меня не подвелла. Рекомендация есть такая)
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807875
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123petrav,
Иначе будет мешанина из QString и char.
Imho
DLL нужна тогда, когда она нужна. При аккуратном и осмысленном распределении функционала по компонентам - там не будет мешанины между QString, std::string и char. Даже и без DLL. Точнее DLL к этому проектированию вообще не имеет никакого отношения.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39807908
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
У меня imho было. Делай.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39808071
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У меня вопрос, а нужно ли использовать _s функции? Старые живут в старом рантайме, который много где есть, новые - только в новом, который мало, где есть, и появляются юзеры с жалобами на надобность ставить очередной runtime distriblutable. Это всё можно, конечно, можно статически залинковать прям в проект, но нафига?...

И ещё вопрос, можно ли в 2017-й студии собрать Windows-2000-compatible?
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39808247
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbУ меня вопрос, а нужно ли использовать _s функции? Старые живут в старом рантайме, который много где есть, новые - только в новом, который мало, где есть, и появляются юзеры с жалобами на надобность ставить очередной runtime distriblutable. Это всё можно, конечно, можно статически залинковать прям в проект, но нафига?...

И ещё вопрос, можно ли в 2017-й студии собрать Windows-2000-compatible?
Нет. Поддержку 2000 дропнули в VS2010
You can use VS 2010 to target Windows 2000 with the EncodePointer/DecodePointer trick. The issue here is that the VS 2010 C runtime library (CRT) requires these functions (it calls them internally), but these functions do not exist on versions of the OS prior to Windows XP SP2.
https://stackoverflow.com/questions/19516796/visual-studio-2012-win32-project-targeting-windows-2000

VS2015 умеет собрать для XP
VS2017 тоже - доустановить пакет "Поддержка WinXP для C++"

Кстати, в C# поддержка .NET2.0 (2000 compatible) есть даже VS2019
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39808354
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbУ меня вопрос, а нужно ли использовать _s функции? Старые живут в старом рантайме, который много где есть, новые - только в новом, который мало, где есть, и появляются юзеры с жалобами на надобность ставить очередной runtime distriblutable. Это всё можно, конечно, можно статически залинковать прям в проект, но нафига?...
Зачем? Это вопрос разработки безопасных и надёжных приложений. Да можно пользоваться опасной sprintf().

Если мы выбираем безопасные функции, то интереснее вопрос: что предпочтительнее snprintf() или sprintf_s()? Тут я не могу ответить конструктивно. И потому доверяю рекомендациям компилятора - выбираю _s версию. Вот на этот вопрос было бы интересно услышать мнение от людей, которые разбираются.

Пожалуйста, ждём :)
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39809324
Siemargl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,

надо стараться забыть (понятно в легаси не получается) и про sprintf и про asciiz строки и про рав-указатели

использовать strstream и std:: в полный рост

полумеры ни к чему. но можно прогнать через линтер и хотя бы очевидные баги засветятся
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39809995
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petravЗачем?потому что в результате некоторым пользователям вываливается сообщение о необходимости установить C++ Runtime библиотеки.
petravЭто вопрос разработки безопасных и надёжных приложений.Ну да, но это очень сильно зависит от самого разработчика.
Siemarglиспользовать strstream и std:: в полный роста у меня вот такой вопрос по std::строкам: есть такой файл "tchar.h", который делает обвязку для stdio для случаев unicode vs multibyte. Ок. Почему ничего такого нету для std::string? Или есть? К примеру, у меня есть некоторые свои библиотеки кода, которые работают со строками и с бустом. При использовании их в разных проектах (unicode/multibyte) пришлось бы везде переправлять с string на wstring. Я сделал обвязку tstring по аналогии с tchar.h, и у меня теперь всё работает и там и там. Но я подозреваю, что так можно было и не делать. А как правильно?
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39810084
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav, делай сразу std::string строки. У тебяж С++ ?
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39810167
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMbПочему ничего такого нету для std::string? Или есть?

std::string == std::basic_string<char>
std::wstring == std::basic_string<wchar_t>

Что тебе мешает объявить std::tstring = std::basic_string<TCHAR>?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39810487
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЧто тебе мешает объявить std::tstring = std::basic_string<TCHAR>?да ничего не мешает (я сделал же define), но обычно, в 99% случаев, когда что-то нужно что-то фундаментальное, обычно это уже сделано, просто про это не знаешь

Поэтому я и спросил, раз уже сделали tchar, то логично предположить, что и какой-то tstring уже есть.
Не, ну если нету, то нету, тогда я молодец
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39810627
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TCHAR был костылём на переходный период, когда юникод ещё толком не работал. Сейчас уже
нет смысла делать не-юникодные программы.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39811041
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov, у меня фреймворк использует однобайтные строки.
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39811170
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Курс - на изоляционизм
...
Рейтинг: 0 / 0
VS2017: отсутствуют сообщения о небезопасных строковых функциях
    #39812940
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovTCHAR был костылём на переходный период, когда юникод ещё толком не работал. Сейчас уже
нет смысла делать не-юникодные программы.


Ну, есть, и дофига.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / VS2017: отсутствуют сообщения о небезопасных строковых функциях
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]