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

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

Восстановить пароль Регистрация
 
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 167
25.11.2015, 00:31     Недружелюбный strcpy_s и прочие *_s #1
Доброй ночи. Подскажите, если есть два 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/strcpy_s C++
Использование strcpy_s C++
Чем отличаются функции strcpy и strcpy_s C++
C++ Call to undefined function 'strcpy_s'
Подскажите, почему не работает strcpy_s() C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1863 / 1659 / 578
Регистрация: 14.05.2014
Сообщений: 4,770
Записей в блоге: 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
1863 / 1659 / 578
Регистрация: 14.05.2014
Сообщений: 4,770
Записей в блоге: 1
Завершенные тесты: 5
25.11.2015, 00:37     Недружелюбный strcpy_s и прочие *_s #4
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
О том, что они опасны, думают только мелкомягкие разработчики.
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 167
25.11.2015, 01:01  [ТС]     Недружелюбный strcpy_s и прочие *_s #5
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
О том, что они опасны, думают только мелкомягкие разработчики
Параллельно вводя в заблуждение начинающих. Спасибо за советы!

Проект выдался уже довольно большим(несколько тыс. строк), навряд ли успею переделать по-нормальному на этот раз, но в будущем буду использовать класс std::string, спасибо. Гораздо удобнее, не спорю, но нам не позволяли использовать его до последнего момента(речь про лабы).
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
25.11.2015, 08:09     Недружелюбный strcpy_s и прочие *_s #6
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
В частности тем, что нет контроля границ. В strncpy, например, уже можно передавать максимальный размер целевой строки.
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16828 / 5249 / 321
Регистрация: 30.03.2009
Сообщений: 14,136
Записей в блоге: 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
Еще ссылки по теме:

Не работает strcat_s с strcpy_s C++
C++ Работа с массивом с через strcpy_s()
C++ Strcat или strcpy_s

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 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
Ответ Создать тему
Опции темы

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