Обнаружил в мсдн информацию про датчик случайных чисел
rand_s()
Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
И еще вопрос.
При создании динамического массива выражение-размер может быть дробным и даже отрицательным.
Дотнет 2005 никаких сообщений не выдает. Тут случайно не UB?
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, LaptevVV, Вы писали:
LVV>Обнаружил в мсдн информацию про датчик случайных чисел LVV>rand_s() LVV>Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
Этот пример у меня работает http://msdn2.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx
LVV>При создании динамического массива выражение-размер может быть дробным и даже отрицательным.
В std::vector тип размера — size_t — целой беззнаковое число.
LVV>При создании динамического массива выражение-размер может быть дробным и даже отрицательным. LVV>Дотнет 2005 никаких сообщений не выдает. Тут случайно не UB?
Тут конверсия из double в size_t (или из signed int в size_t).
int* i = new int[1.4];
c:\documents and settings\left.avalanche\my documents\visual studio 2008\projects\tst\tst\tst.cpp(67) : warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
Здравствуйте, LaptevVV, Вы писали:
LVV>Обнаружил в мсдн информацию про датчик случайных чисел LVV>rand_s() LVV>Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
Странно, у меня пример из MSDN нормально работает. Вообще, в MSDN указано, что rand_s() работает только на WinXP и более "новых" системах. Может, в этом дело?
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, LaptevVV, Вы писали:
LVV>>Обнаружил в мсдн информацию про датчик случайных чисел LVV>>rand_s() LVV>>Однако заставить его работать, следуя указаниям мсдн, мне не удалось. Мож кто знает, как это сделать?
MC>Странно, у меня пример из MSDN нормально работает. Вообще, в MSDN указано, что rand_s() работает только на WinXP и более "новых" системах. Может, в этом дело?
Понял! У меня 2000 с сервис-паками стоит. Спасибо!
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Left2, Вы писали:
LVV>>При создании динамического массива выражение-размер может быть дробным и даже отрицательным. LVV>>Дотнет 2005 никаких сообщений не выдает. Тут случайно не UB? L>Тут конверсия из double в size_t (или из signed int в size_t).
L>
L>int* i = new int[1.4];
L>
L>c:\documents and settings\left.avalanche\my documents\visual studio 2008\projects\tst\tst\tst.cpp(67) : warning C4244: 'initializing' : conversion from 'double' to 'unsigned int', possible loss of data
L>a Warning level у тебя какой стоит?
Спасибо за напоминание. Понятно, что преобразование идет, только я забыл выставить уровень предупреждений высокий.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Оказывается, в ней security enhancements as described in Security Enhancements in the CRT.
В чем они заключаются ? А вот в чем
the function invokes an invalid parameter handler, as described in Parameter Validation.
Ну да, конечно. У прежней rand никаких параметров не было, так что в чем она провинилась перед Security Enhancements — сказать трудно. А у этой параметр появился, да еще указатель — как тут без Validation!
Но это еще не все. Иду по странице
rand_s depends on the RtlGenRandom API, which is only available in Windows XP and later
захожу на ссылку по RtlGenRandom и...
Content cannot be found
Во как! Ладно, иду в online MSDN
RtlGenRandom
[The RtlGenRandom function is available for use in the operating systems listed in the Requirements section. It may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.]
The RtlGenRandom function generates a pseudo-random number.
Note This function has no associated import library. This function is available as a resource named SystemFunction036 in Advapi32.dll. You must use the LoadLibrary and GetProcAddress functions to dynamically link to Advapi32.dll.
Здравствуйте, Pavel Dvorkin, Вы писали:
LVV>>rand_s() PD>Жуткая функция! PD>Зашел на этот линк PD>http://msdn2.microsoft.com/en-us/library/sxtz2fa8(VS.80).aspx PD>Оказывается, в ней security enhancements as described in Security Enhancements in the CRT. PD>В чем они заключаются ? А вот в чем PD>the function invokes an invalid parameter handler, as described in Parameter Validation. PD>Ну да, конечно. У прежней rand никаких параметров не было, так что в чем она провинилась перед Security Enhancements — сказать трудно. А у этой параметр появился, да еще указатель — как тут без Validation! PD>Но это еще не все. Иду по странице PD>rand_s depends on the RtlGenRandom API, which is only available in Windows XP and later PD>захожу на ссылку по RtlGenRandom и... PD>Content cannot be found PD>Во как! Ладно, иду в online MSDN PD>RtlGenRandom PD>[The RtlGenRandom function is available for use in the operating systems listed in the Requirements section. It may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.] PD>The RtlGenRandom function generates a pseudo-random number. PD>Note This function has no associated import library. This function is available as a resource named SystemFunction036 in Advapi32.dll. You must use the LoadLibrary and GetProcAddress functions to dynamically link to Advapi32.dll.
PD>Кошмар!
Спасибо за исследования!
Я на своей 2000 добился отсутствия ошибок трансляции. Но прога завершалась при обращении к этой функции. Теперь понятно, почему.
Дома инета не было, поэтому по линкам пройти не мог. Но первая ссылка в MSDN такая же, как и на сайте.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Здравствуйте, LaptevVV, Вы писали:
LVV>>rand_s()
PD>Жуткая функция!
PD>Кошмар!
Я склонен думать, что эту функцию назвали Secure не из-за её параметров, а из-за того, что она использует системный датчик случайных чисел, а не самописный (который используется в rand и оставляет желать лучшего). Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
N>Я склонен думать, что эту функцию назвали Secure не из-за её параметров, а из-за того, что она использует системный датчик случайных чисел, а не самописный (который используется в rand и оставляет желать лучшего).
Я таки очень извиняюсь, но чем системный отличается от самописного, если речь идет о продукции Микрософт ?
>Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
Не стоит
[The RtlGenRandom function is available for use in the operating systems listed in the Requirements section. It may be altered or unavailable in subsequent versions. Instead, use the CryptGenRandom function.]
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Я таки очень извиняюсь, но чем системный отличается от самописного, если речь идет о продукции Микрософт ?
Извиняюсь за оффтоп, но складывается чувство, что здесь собрались сплошь латентные микрософтофобы Не подумайте, что я являются проповедником микрософта — там _s функции в проектах не использую почти никогда, первым же делом всегда дефайню _CRT_SECURE_NO_DEPRECATE
Извиняюсь за оффтоп, но складывается чувство, что здесь собрались сплошь латентные микрософтофобы Не подумайте, что я являются проповедником микрософта — сам _s функции в проектах не использую почти никогда, первым же делом всегда дефайню _CRT_SECURE_NO_DEPRECATE
Здравствуйте, Roman Odaisky, Вы писали: RO>И правильно. Всё намного проще. Читай байты из /dev/random, и будет тебе счастье. RO>(Чем одно платформеннозависимое решение лучше другого?)
Не понимаю иронии. /dev/random — платформозависимое решение, а rand_s() — решение, которое по сути не рекомендует использовать сам разработчик.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, Roman Odaisky, Вы писали: RO>>И правильно. Всё намного проще. Читай байты из /dev/random, и будет тебе счастье. RO>>(Чем одно платформеннозависимое решение лучше другого?)
MC>Не понимаю иронии. /dev/random — платформозависимое решение, а rand_s() — решение, которое по сути не рекомендует использовать сам разработчик.
Гм, боюсь спросить, а где именно написано, что не рекомендует?
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, Nazik, Вы писали: N>>Т.е. под Secure имеется в виду то, что её можно использовать при решении криптографических задач.
MC>Эм... Самостоятельно почитав то, что написано про RtlGenRandom, я вообще побоялся бы rand_s использовать.
Здравствуйте, lifrsdn, Вы писали: L>Гм, боюсь спросить, а где именно написано, что не рекомендует? здесь
...хотя тут вот товарищ вовсю RtlGenRandom рекламирует.
Ситуация такая:
On a default Windows XP and later install, CryptGenRandom calls into a function named ADVAPI32!RtlGenRandom, which does not require you load all the CryptAPI stuff.
то бишь
По умолчанию, начиная с Windows XP и CryptGenRandom обращается к функции ADVAPI32!RtlGenRandom, которая не требует загрузки CryptoAPI.
Вот. Идея заключается в том, чтобы не загружая CryptoAPI получить "сильные" случайные числа. Только способ получается платформозависимым. Правда я сомневаюсь, что MS уберет RtlGenRandom из будущих версий винды.
Здравствуйте, Mr.Cat, Вы писали:
MC>Здравствуйте, lifrsdn, Вы писали: L>>Гм, боюсь спросить, а где именно написано, что не рекомендует? MC>здесь
MC>...хотя тут вот товарищ вовсю RtlGenRandom рекламирует.
MC>Ситуация такая: MC>
MC>On a default Windows XP and later install, CryptGenRandom calls into a function named ADVAPI32!RtlGenRandom, which does not require you load all the CryptAPI stuff.
MC>то бишь MC>
MC>По умолчанию, начиная с Windows XP и CryptGenRandom обращается к функции ADVAPI32!RtlGenRandom, которая не требует загрузки CryptoAPI.
MC>Вот. Идея заключается в том, чтобы не загружая CryptoAPI получить "сильные" случайные числа. Только способ получается платформозависимым. Правда я сомневаюсь, что MS уберет RtlGenRandom из будущих версий винды.
CryptGenRandom требует HCRYPTPROV. Чтобы её вызвать нужно всё равно загрузить CryptoAPI получается.