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

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

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

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

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

Доброй ночи. Подскажите, если есть два char* , то как осуществить копирование одного в другой, их конкатенацию? Про strcpy и прочие в курсе, но назрело желание провернуть это как-то иначе, если это возможно, без _CRT_SECURE_NO_WARNINGS, т.е. иными функциями из STL. Но вот только не выходит ничего подходящего найти.
И чем "опасны" функции эти unsafety функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 00:31     Недружелюбный strcpy_s и прочие *_s
Посмотрите здесь:
Использование strcpy_s C++
strcpy/strcpy_s C++
Не работает strcat_s с strcpy_s C++
C++ Strcat или strcpy_s
Разница между strcpy_s и strcpy? C++
C++ Call to undefined function 'strcpy_s'
Подскажите, почему не работает strcpy_s() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
Эксперт PHP
2167 / 1963 / 685
Регистрация: 14.05.2014
Сообщений: 5,747
Записей в блоге: 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
Модератор
Эксперт PHP
2167 / 1963 / 685
Регистрация: 14.05.2014
Сообщений: 5,747
Записей в блоге: 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
:)
Эксперт С++
4392 / 3235 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.11.2015, 08:09     Недружелюбный strcpy_s и прочие *_s #6
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
В частности тем, что нет контроля границ. В strncpy, например, уже можно передавать максимальный размер целевой строки.
Evg
Эксперт CАвтор FAQ
17470 / 5708 / 363
Регистрация: 30.03.2009
Сообщений: 15,677
Записей в блоге: 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()
Strcpy_s выдает ошибку buffer is too small C++
Как передать динамический массив в strcpy_s? C++
Чем отличаются функции strcpy и strcpy_s C++
C++ Ошибка error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead

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

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

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