Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 173
#1

Недружелюбный strcpy_s и прочие *_s - C++

25.11.2015, 00:31. Просмотров 214. Ответов 7
Метки нет (Все метки)

Доброй ночи. Подскажите, если есть два char* , то как осуществить копирование одного в другой, их конкатенацию? Про strcpy и прочие в курсе, но назрело желание провернуть это как-то иначе, если это возможно, без _CRT_SECURE_NO_WARNINGS, т.е. иными функциями из STL. Но вот только не выходит ничего подходящего найти.
И чем "опасны" функции эти unsafety функции?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
2031 / 1827 / 632
Регистрация: 14.05.2014
Сообщений: 5,330
Записей в блоге: 1
Завершенные тесты: 5
25.11.2015, 00:36     Недружелюбный strcpy_s и прочие *_s #2
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
функциями из STL
в STL есть класс std::string, зачем там char *? Без strcpy и иже с ней пиши свои велосипеды.
Хулиган
 Аватар для Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
25.11.2015, 00:36     Недружелюбный strcpy_s и прочие *_s #3
Примерно так:

C++
1
2
3
4
5
6
char* str1 = "some string";
...
int size = length(str1);
char* str2 = new char[size];
 
std::copy(str1, str1 + size, str2);
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
2031 / 1827 / 632
Регистрация: 14.05.2014
Сообщений: 5,330
Записей в блоге: 1
Завершенные тесты: 5
25.11.2015, 00:37     Недружелюбный strcpy_s и прочие *_s #4
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
О том, что они опасны, думают только мелкомягкие разработчики.
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 173
25.11.2015, 01:01  [ТС]     Недружелюбный strcpy_s и прочие *_s #5
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
О том, что они опасны, думают только мелкомягкие разработчики
Параллельно вводя в заблуждение начинающих. Спасибо за советы!

Проект выдался уже довольно большим(несколько тыс. строк), навряд ли успею переделать по-нормальному на этот раз, но в будущем буду использовать класс std::string, спасибо. Гораздо удобнее, не спорю, но нам не позволяли использовать его до последнего момента(речь про лабы).
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.11.2015, 08:09     Недружелюбный strcpy_s и прочие *_s #6
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
В частности тем, что нет контроля границ. В strncpy, например, уже можно передавать максимальный размер целевой строки.
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
17022 / 5427 / 336
Регистрация: 30.03.2009
Сообщений: 14,689
Записей в блоге: 26
25.11.2015, 16:50     Недружелюбный strcpy_s и прочие *_s #7
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
Такой код является некорректным, потому как в процессе исполнения произойдёт выход за границу массива. strcpy_s позволяет как бы обнаружить проблему

C
char buff[3];
strcpy (buff, "qqqqqqqqqqqqqqqqqqq");
Цитата Сообщение от Tulosba Посмотреть сообщение
В strncpy, например, уже можно передавать максимальный размер целевой строки
Стандартное заблуждение - Распространенные ошибки
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2015, 17:15     Недружелюбный strcpy_s и прочие *_s
Еще ссылки по теме:

C++ Работа с массивом с через strcpy_s()
C++ Strcat или strcpy_s
Strcpy_s выдает ошибку buffer is too small C++
Как передать динамический массив в strcpy_s? C++
Разница между strcpy_s и strcpy? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4384 / 3227 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.11.2015, 17:15     Недружелюбный strcpy_s и прочие *_s #8
Цитата Сообщение от Evg Посмотреть сообщение
Стандартное заблуждение
Размер целевой строки передавать можно? Можно.
Это защитит от записи лишних символов? Защитит.
То, что нужно ещё терминировать строку дополнительно на всякий случай это уже нюанс, который, конечно, надо знать.
Yandex
Объявления
25.11.2015, 17:15     Недружелюбный strcpy_s и прочие *_s
Ответ Создать тему
Опции темы

Текущее время: 03:48. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru