| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Visual C++/MFC/WTL > strcpy_s vs strcpy |
| Автор: GoldFinch 14.7.2009, 18:14 | ||
| есть задача - заполнить массив char[] строкой, неиспользованные байты забить нулями пишу код
вроде все красиво выглядит, использовал "безопасную" strcpy_s , только вот незадача, эта *нехорошая* функция забивает остаток буфера символами 0xFE что характерно, в документации об этом ни слова. |
| Автор: AlexT84 14.7.2009, 19:56 |
| Это только в дебаге. В релизе остаток буфера остаётся нетронутым. |
| Автор: Vaulter 14.7.2009, 20:12 | ||
| в дебаге просто буфера сразу содержат 0xFE наверно... а могут 0xCD не суть. суть: слюшай дарагой! у тебя std::string есть? зачем char* а? Добавлено через 2 минуты и 29 секунд
пробовал? а memset( this убери от греха подальше |
| Автор: GoldFinch 14.7.2009, 21:06 |
| Vaulter, 1) не char* а char[], и потому что так надо. надо - значит надо. 2) зачем вызывать 2 раза memset если можно вызвать 1 раз? AlexT84, верю, только мне теперь не дебажить чтоли? |
| Автор: Rififi 14.7.2009, 23:21 |
| есть задача - заполнить массив char[] строкой, неиспользованные байты забить нулями char login[14] = {0}; char password[16] = {0}; + юзать StrSafe API |
| Автор: Vaulter 14.7.2009, 23:31 |
ну две переменных ж. зачем две переменных? |
| Автор: jonie 15.7.2009, 08:01 |
| чет я не понимаю смысла использоваяния безопасных функций без проверки их результата... |
| Автор: GoldFinch 15.7.2009, 08:22 |
| jonie, чтобы ворнинга небыло |
| Автор: AlexT84 15.7.2009, 10:41 |
| Ну почему же не дебажить? Зайди в настройки проекта: C/C++ -> Code Generation -> Runtime Libruary и выставь там флаг /MT, или /MD. Будет тебе дебаг проект с релизными библиотеками. |
| Автор: GoldFinch 15.7.2009, 22:08 |
в структуре это не работает, см. пост #1 |
| Автор: Vaulter 16.7.2009, 00:27 |
| кстати, boost::serialization "держит" ВСЕ STL контейнеры http://www.boost.org/doc/libs/1_39_0/libs/serialization/doc/tutorial.html#serializablemembers |
| Автор: GoldFinch 16.7.2009, 19:04 | ||
| Vaulter, я рад за boost::serialization, но у меня своя сериализация, бустовская мне не подходит. пожалуй действительно лучше забить на странный strcpy и использовать std::string
|
| Автор: GoldFinch 16.7.2009, 20:51 | ||
| mes, код который я использовал до этого
тоже вобщем-то резал глаз писать свою strcpy ради такого случая - у нее будет странная функциональность, и я хз где еще ее можно будет использовать (какбэ задача - чтобы в буфере архива оказались строки логина и пароля выровненные до 14 и 16 байт соответственно) |
| Автор: mes 16.7.2009, 23:30 |
угу ну так название я специально взял в кавычки, тут подумать надо какую именно логику должна нести функция, чтоб выглядело красиво.. |
| Автор: mes 17.7.2009, 14:50 | ||
Для си-строки, что то ничего хорошего в голову не приходит. Все таки std::string будет удобнее, только .append лучше заменить на .resize (size,'\0'); хотя бы потому, что входная строка может быть длиннее нормы. |
| Автор: GoldFinch 17.7.2009, 15:40 |
| да, про resize с двумя аргументами я забыл, так конечно лучше |