Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение? / 12 сообщений из 12, страница 1 из 1
23.12.2013, 14:36
    #38510013
S0ME0NE
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
Добрый день.
Код: 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
23.12.2013, 14:58
    #38510047
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
S0ME0NE,

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

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

надо эту функцию либо заменить без ущерба для скорости и не уходить от стандарта C++
потому что компиляторов у меня будет несколько
...
Рейтинг: 0 / 0
23.12.2013, 15:54
    #38510105
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
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
23.12.2013, 15:56
    #38510107
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Чем лучше заменить sprintf() или всё-таки проверять возможное переполнение?
Anatoly MoskovskyДля sprintf это sprintf_s.

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

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


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


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