Re: _snprintf vs spintf_s
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 11.02.14 11:01
Оценка: +2 :)
Здравствуйте, Hayabusa, Вы писали:

H>И зачем вообще нужна функция _snprintf_s? ))


Термин "фатальный недостаток" тебе знаком? Разработчикам из МС он очень близок, и эти функции одно из проявлений этого явления.
Re[3]: _snprintf vs spintf_s
От: i3F  
Дата: 11.02.14 10:00
Оценка: 2 (1)
H>Нет, я не про то. Зачем в нее передается размер буфера и еще параметр count (Maximum number of characters to store, or _TRUNCATE.).
H>Чет не пойму смысла в этом..


int _snprintf_s(
    char *buffer,
    size_t sizeOfBuffer,
    size_t count,
    const char *format [,
    argument] ... 
);



Если потребуется записать в buffer больше символов, чем sizeOfBuffer, то произойдет ошибка и программа сломается.

При записи в buffer строка при необходимости усекается до длины count.
При этом программа не ломается.
Такое поведение бывает необходимо.
Re: _snprintf vs spintf_s
От: okman Беларусь https://searchinform.ru/
Дата: 10.02.14 17:19
Оценка: :)
Здравствуйте, Hayabusa, Вы писали:

H>Кто может русским языком объяснить разницу между этими функциями?


H>И зачем вообще нужна функция _snprintf_s? ))


Security Enhancements in the CRT
http://msdn.microsoft.com/en-us/library/8ef0s5kh%28v=vs.90%29.aspx

It should also be noted that the secure functions do not prevent or correct security errors;
rather, they catch errors when they occur. They perform additional checks for error conditions,
and in the case of an error, they invoke an error handler.

Some of the security enhancements include the following:

Parameter Validation.

...

Sized Buffers.

...

Null termination.

...

Enhanced error reporting.

...

Filesystem security.

...

Windows security.

...

Format string syntax checking.

...

_snprintf vs spintf_s
От: Hayabusa Россия  
Дата: 10.02.14 15:26
Оценка:
Кто может русским языком объяснить разницу между этими функциями?

И зачем вообще нужна функция _snprintf_s? ))
Re: _snprintf vs spintf_s
От: _Dreamer Россия  
Дата: 10.02.14 17:18
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>Кто может русским языком объяснить разницу между этими функциями?


H>И зачем вообще нужна функция _snprintf_s? ))


У меня есть гипотеза, что это больше всего для версий с wchar_t у функции
int _snwprintf(
   wchar_t *buffer,
   size_t count,
   const wchar_t *format [,
   argument] ... 
);


Если провтыкать и написать
wchar_t buffer[4];
_snwprintf(buffer, sizeof(buffer), L"%d", 9999999);

то проверка пройдет, а память затрется.

А вариант для char* уже для симметрии сделали.
Re: _snprintf vs spintf_s
От: Erop Россия  
Дата: 10.02.14 18:56
Оценка:
Здравствуйте, Hayabusa, Вы писали:

H>Кто может русским языком объяснить разницу между этими функциями?


Ну, семейство С-шных функций sprintf признанно опасным, и им на замену предлагаются существенно С++-ные шаблоны функций и функции семейства _s (тут s от слова "безопасный").
Соответственно, если весь код переписать с С-шных, опасных на С++ные -- безопасные, то типа переполнения буферов не пройдут больше в этом месте...

H>И зачем вообще нужна функция _snprintf_s? ))

Ну семейство _s-функций так спроектировано, что бы переход от опасных к безопасным можно было выполнить, делая простые, формальные правки...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: _snprintf vs spintf_s
От: Hayabusa Россия  
Дата: 11.02.14 08:30
Оценка:
Здравствуйте, Erop, Вы писали:

E>Ну, семейство С-шных функций sprintf признанно опасным, и им на замену предлагаются существенно С++-ные шаблоны функций и функции семейства _s (тут s от слова "безопасный").

E>Соответственно, если весь код переписать с С-шных, опасных на С++ные -- безопасные, то типа переполнения буферов не пройдут больше в этом месте...

Я в курсе про безопасные функции с суффиксом _s, просто мне кажется, что эти функции делают одно и то же

E>Ну семейство _s-функций так спроектировано, что бы переход от опасных к безопасным можно было выполнить, делая простые, формальные правки...


Нет, я не про то. Зачем в нее передается размер буфера и еще параметр count (Maximum number of characters to store, or _TRUNCATE.).
Чет не пойму смысла в этом..
Re[3]: _snprintf vs spintf_s
От: Vzhyk  
Дата: 11.02.14 10:14
Оценка:
2/11/2014 11:30 AM, Hayabusa пишет:

> Чет не пойму смысла в этом..

А смысла нет. Просто не используй этот бред с суффиксом _s в коде и все.
Posted via RSDN NNTP Server 2.1 beta
Re[4]: _snprintf vs spintf_s
От: Hayabusa Россия  
Дата: 11.02.14 10:45
Оценка:
Здравствуйте, i3F, Вы писали:

i3F>Если потребуется записать в buffer больше символов, чем sizeOfBuffer, то произойдет ошибка и программа сломается.

i3F>При записи в buffer строка при необходимости усекается до длины count.
i3F>При этом программа не ломается.
i3F>Такое поведение бывает необходимо.

Спасибо, примерно понятно
Re[2]: _snprintf vs spintf_s
От: Hayabusa Россия  
Дата: 11.02.14 11:38
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Термин "фатальный недостаток" тебе знаком? Разработчикам из МС он очень близок, и эти функции одно из проявлений этого явления.


Ясно
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.