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

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

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

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

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

Доброй ночи. Подскажите, если есть два char* , то как осуществить копирование одного в другой, их конкатенацию? Про strcpy и прочие в курсе, но назрело желание провернуть это как-то иначе, если это возможно, без _CRT_SECURE_NO_WARNINGS, т.е. иными функциями из STL. Но вот только не выходит ничего подходящего найти.
И чем "опасны" функции эти unsafety функции?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2015, 00:31
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Недружелюбный strcpy_s и прочие *_s (C++):

Использование strcpy_s - C++
Добрый день. Словил странную проблему (компилятор MVS2010) #include<iostream> #include<cstring> using namespace std; class String...

strcpy/strcpy_s - C++
Добрый вечер! Есть класс (упрощенно): class const_string { public: const_string(char const* s) { strcpy(str, s); /...

Strcat или strcpy_s - C++
strcat(name, " "); strcat(lastname, " "); strcpy(name, (strcat(strcat(lastname, name), dlastname))); strcpy(nomergroup, strcat(v,...

Не работает strcat_s с strcpy_s - C++
strcat_s(strcpy_s(s3, sizeof(s1), s1),sizeof(s2), s2); Так не работает. strcpy_s(s3, sizeof(s1), s1); strcat_s(s3, sizeof(s2), s2); А...

Подскажите, почему не работает strcpy_s() - C++
Вот код char *pcStr = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.22 (KHTML, like Gecko) Chrome/25.0.1364.97 Safari/537.22" ...

Call to undefined function 'strcpy_s' - C++
Использую C++Builder® 2009 при использовании strcpy_s выдает ошибку File1.cpp(10): E2268 Call to undefined function 'strcpy_s' ...

7
Kerry_Jr
Модератор
Эксперт PHP
2201 / 1997 / 700
Регистрация: 14.05.2014
Сообщений: 5,856
Записей в блоге: 1
Завершенные тесты: 5
25.11.2015, 00:36 #2
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
функциями из STL
в STL есть класс std::string, зачем там char *? Без strcpy и иже с ней пиши свои велосипеды.
1
Хулиган
85 / 80 / 12
Регистрация: 08.08.2012
Сообщений: 737
25.11.2015, 00:36 #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);
1
Kerry_Jr
Модератор
Эксперт PHP
2201 / 1997 / 700
Регистрация: 14.05.2014
Сообщений: 5,856
Записей в блоге: 1
Завершенные тесты: 5
25.11.2015, 00:37 #4
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
О том, что они опасны, думают только мелкомягкие разработчики.
1
Minchanin-Bel
5 / 5 / 1
Регистрация: 19.09.2010
Сообщений: 173
25.11.2015, 01:01  [ТС] #5
Цитата Сообщение от Kerry_Jr Посмотреть сообщение
О том, что они опасны, думают только мелкомягкие разработчики
Параллельно вводя в заблуждение начинающих. Спасибо за советы!

Проект выдался уже довольно большим(несколько тыс. строк), навряд ли успею переделать по-нормальному на этот раз, но в будущем буду использовать класс std::string, спасибо. Гораздо удобнее, не спорю, но нам не позволяли использовать его до последнего момента(речь про лабы).
0
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.11.2015, 08:09 #6
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
В частности тем, что нет контроля границ. В strncpy, например, уже можно передавать максимальный размер целевой строки.
2
Evg
Эксперт CАвтор FAQ
17944 / 6175 / 411
Регистрация: 30.03.2009
Сообщений: 16,952
Записей в блоге: 27
25.11.2015, 16:50 #7
Цитата Сообщение от Minchanin-Bel Посмотреть сообщение
И чем "опасны" функции эти unsafety функции?
Такой код является некорректным, потому как в процессе исполнения произойдёт выход за границу массива. strcpy_s позволяет как бы обнаружить проблему

C
char buff[3];
strcpy (buff, "qqqqqqqqqqqqqqqqqqq");
Цитата Сообщение от Tulosba Посмотреть сообщение
В strncpy, например, уже можно передавать максимальный размер целевой строки
Стандартное заблуждение - Распространенные ошибки
1
Tulosba
:)
Эксперт С++
4396 / 3232 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
25.11.2015, 17:15 #8
Цитата Сообщение от Evg Посмотреть сообщение
Стандартное заблуждение
Размер целевой строки передавать можно? Можно.
Это защитит от записи лишних символов? Защитит.
То, что нужно ещё терминировать строку дополнительно на всякий случай это уже нюанс, который, конечно, надо знать.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.11.2015, 17:15
Привет! Вот еще темы с ответами:

Работа с массивом с через strcpy_s() - C++
Функция addBrackets принимает массив и преобразует его заключая в скобки . т.е. на на вход массив: text после преобразования: ...

Разница между strcpy_s и strcpy? - C++
Добрый день! Писал программу с использованием оператора strcpy. Компилятор выдал такое вот предупреждение: error C4996: 'strcpy':...

Strcpy_s выдает ошибку buffer is too small - C++
Вот у меня есть пример простого кода, но почем-то в месте, где вызывается функция копирования, вылезает ошибка. Вроде все делаю правильно: ...

Как передать динамический массив в strcpy_s? - C++
Всем привет, такая проблема: не могу передать динамический массив в функцию strcpy_s, компилятор ошибок не видит, а после исполнения пишет,...


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

Или воспользуйтесь поиском по форуму:
8
Yandex
Объявления
25.11.2015, 17:15
Ответ Создать тему
Опции темы

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