powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
12 сообщений из 12, страница 1 из 1
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510013
S0ME0NE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день.
Код: plaintext
1.
2.
3.
4.
5.
6.
	int i, select_item;
	TCHAR trpr2[100];
...
...
		sprintf(trpr2, "%s %d %s", "слева ", select_item, " справа");
		SetWindowText(hwndStatic, (LPCSTR) trpr2);


На форме есть текстовый статик объект, в него помещаю текстовое значение (оно может меняться)
Для этого использую переменную trpr2
Компилятор MinGw никаких ошибок не выдаёт. Программка нормально работает.
А вот Visual Studio сообщает что возможно переполнение.

Посоветуйте, как поступить.
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510047
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S0ME0NE,

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

В VS есть так называемые безопасные версии для большинства строковых функций, в которых проверяется размер буфера в который пишется результат. У них в имени суффикс _s
Для sprintf это sprintf_s.
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510064
S0ME0NE
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эту функцию sprintf_s я пробовал, но mingw32-g++ пишет 'sprintf_s' was not declared in this scope
Я стараюсь компилировать один и тот же код и в VS и wxDev . Мне так нужно.
И к тому, очень надо чтобы скорость работы программы не стала медленнее
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510069
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если ты внимательно прочитаешь текст этого предупреждения, то найдёшь в нём способ его
отключения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510078
S0ME0ME
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
там VS пишет как отключить сообщение, но мне хотелось без ошибок, даже с буквой w

надо эту функцию либо заменить без ущерба для скорости и не уходить от стандарта C++
потому что компиляторов у меня будет несколько
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510105
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S0ME0NEДобрый день.
Код: plaintext
1.
2.
3.
4.
5.
6.
	int i, select_item;
	TCHAR trpr2[100];
...
...
		sprintf(trpr2, "%s %d %s", "слева ", select_item, " справа");
		SetWindowText(hwndStatic, (LPCSTR) trpr2);


На форме есть текстовый статик объект, в него помещаю текстовое значение (оно может меняться)
Для этого использую переменную trpr2
Компилятор MinGw никаких ошибок не выдаёт. Программка нормально работает.
А вот Visual Studio сообщает что возможно переполнение.

Посоветуйте, как поступить.

Если программа правильная и ты в себе уверен, послать VC подашьше с его дебильными варнингами.
Если боишься -- заменить на snprintf.
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510107
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Anatoly MoskovskyДля sprintf это sprintf_s.

Как бы стандартная -- это sNprintf.
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510109
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S0ME0MEтам VS пишет как отключить сообщение, но мне хотелось без ошибок, даже с буквой w

C буквой W -- это не ошибки, это предупреждения. Без всех предупреждений собрать программу порой очень трудно.
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510152
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivКак бы стандартная -- это sNprintf.
Жаль только, что MSVC клал на этот "стандарт" и не предоставляет snprintf() в stdio без
танцев с бубном и макросами.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510155
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivКак бы стандартная -- это sNprintf.
Жаль только, что MSVC клал на этот "стандарт" и не предоставляет snprintf() в stdio без
танцев с бубном и макросами.


Да, однако, да.
Чета я даже с этим не встречался...
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510190
Фотография Anatoly Moskovsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovMasterZivКак бы стандартная -- это sNprintf.
Жаль только, что MSVC клал на этот "стандарт" и не предоставляет snprintf() в stdio без
танцев с бубном и макросами.
Это С99 - VS его никогда не поддерживал.
Хотя в свежих версиях обещают.
...
Рейтинг: 0 / 0
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
    #38510630
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S0ME0NE, попробуй WIN API функции: StringCbPrintf, StringCbPrintfEx, StringCchPrintf, StringCchPrintfEx.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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