Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/47: Рейтинг темы: голосов - 47, средняя оценка - 4.72
2 / 2 / 0
Регистрация: 31.03.2018
Сообщений: 60

Функция strcpy

09.02.2019, 21:15. Показов 10044. Ответов 18

Студворк — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include "pch.h"
#include <iostream>
#include "string.h"
using namespace std;
char * getname(void);             // прототип функции
 
int main()
{
    char *name;                   // создание указателя, но без хранилища
    name = getname();             // присваивание name адреса строки
    cout << name << " at " << (int *) name << "\n";
    delete[] name;                // освобождение памяти
    name = getname();             // повторное использование освобожденной памяти
    cout << name << " at " << (int *) name << "\n";
    delete[] name;                // снова освобождение памяти
    return 0;
}
char * getname()                 // возвращает указатель на новую строку
{
    char temp[80];               // временное хранилище
    cout << "Enter last name:";  // ввод фамилии
    cin >> temp;
    char * pn = new char[strlen(temp) + 1];
    strcpy(pn, temp);            // копирование строки в меньшее пространство
    return pn;                   // по завершении функции temp теряется
}
Добавлено через 4 минуты
Код юзаю в visual studio, ругается на strcpy, я подозреваю что она как то изменена в с++, как ее реализовать правильно?
Пробовал strpy_s, тоже не получается, если в массив вставлять строку то получается, с указателем нет, помогите пожалуйста)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2019, 21:15
Ответы с готовыми решениями:

Функция strcpy
цель очевидна. почему не работает? :-| #include &lt;iostream&gt; void strcpy(char *from, char *to) { to=from; } int main() { ...

функция strcpy и strcat
Добрый день!У меня такая проблема...Есть массив строк, где хранятся имена и при выводе имени на экран,если оно длиннее определенного,то я...

Функция strcpy() не копирует строку
Функция strcpy() не копирует строку //--------------------------------------------------------------------------- #pragma hdrstop ...

18
 Аватар для IP_TCP
7 / 6 / 2
Регистрация: 19.08.2018
Сообщений: 108
09.02.2019, 21:23
strcpy_s(pn, temp + 1,temp);
0
Модератор
Эксперт С++
 Аватар для zss
13769 / 10962 / 6491
Регистрация: 18.12.2011
Сообщений: 29,236
10.02.2019, 10:01
IP_TCP, Араик Расоян, настоятельно советую смотреть справку по функции прежде, чем использовать.
Для этого достаточно поставить текстовый курсор внутри названия функции и нажать клавишу F1
цитирую
Синтаксис
C
C
1
2
3
4
5
errno_t strcpy_s(
   char *dest,
   rsize_t dest_size,
   const char *src
);
Параметры

dest
Расположение строкового буфера назначения.

dest_size
Размер строкового буфера назначения в char единицы для узкой и многобайтовых функций и wchar_t единицы для расширенных функций. Это значение должно быть больше нуля и не больше, чем RSIZE_MAX.

src
Исходная строка, завершающаяся нулем.
Тогда бы Вы не задумываясь написали
C
1
2
char * pn = new char[strlen(temp) + 1];
    strcpy_s(pn, strlen(temp) + 1, temp);
1
 Аватар для IP_TCP
7 / 6 / 2
Регистрация: 19.08.2018
Сообщений: 108
10.02.2019, 11:17
zss, спасибо, что указали на ошибку. Туп безбожно((
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
11.02.2019, 11:10
Цитата Сообщение от IP_TCP Посмотреть сообщение
strcpy_s(pn, temp + 1,temp);
Не учите плохому! Этот код работает только в msvs и ни в каком другом компиляторе.
Зачем вообще использовать нестандартные функции если есть strncpy?
C
1
strncpy(pn, strlen(temp)+1, temp);
А если msvs будет ругаться на стандартные функции (оно это умеет), допишите в самом начале
C
1
#define _CRT_SECURE_NO_WARNINGS
1
2 / 2 / 0
Регистрация: 31.03.2018
Сообщений: 60
14.02.2019, 08:49  [ТС]
Отчитываюсь)
Попробовал сделать как предложили через strncpy, студия плюется ошибками и ругается "This function or variable may be unsafe. Consider using strncpy_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details". Тоесть не хочет она видеть видимо старушку strncpy. Сделал вот так:
C++
1
strcpy_s(pn, strlen(temp) +1, temp);
Все заработало. Спасибо за совет, теперь я буду смотреть какие аргументы принимает функция через наведение стрелки на функцию, ф1 у меня звук отключает но она и не нужна, просто навожу стрелку на функцию и отображает ее аргументы.
0
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
14.02.2019, 09:41
Повторяю: использование *_s() функций - плохая идея. Они работают только под msvs. Любой нормальный компилятор будет на них ругаться, мол знать такого не знаю. Соответственно, это снизит количество желающих вам помочь в случае чего - им будет просто лень исправлять все эти strcpy_s на нормальные.
Более правильным решением будет заставить msvs следовать стандарту. Она же сама пишет: "To disable deprecation, use _CRT_SECURE_NO_WARNINGS", вот и напишите в первой же строчке исходника, еще до инклюдов
C
1
#define _CRT_SECURE_NO_WARNINGS
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
14.02.2019, 09:53
Люто поддерживаю! Использование всякой нестандартной фигни типа *_s - функций не является хорошей идеей.
0
 Аватар для IP_TCP
7 / 6 / 2
Регистрация: 19.08.2018
Сообщений: 108
14.02.2019, 14:04
COKPOWEHEU, jugu, а я с вами абсолютно не согласен. И ответ одного из пользователей форума на эту тему мне ближе, чем ответ " Не учите плохому! Этот код работает только в msvs и ни в каком другом компиляторе."
Я смотрю на это иначе. Данная "принудиловка" в стиле MS - это попытка сразу отучать
начинающих программистов использовать древние окаменелости strcpy, strcat, sprintf и т.п.,
где очень легко нарваться на выход за пределы буфера или получить неопределенное
поведение программы. В этом случае есть хоть какая-то вероятность, что программист
обратит на это внимание и хотя бы поинтересуется на MSDN, почему это вдруг функции
стали небезопасными и код перестал компилироваться, и уже потом сделает для себя
выводы и выберет какой-то свой подход, а не будет сразу тупо задавливать варнинг
каким-нибудь _CRT_SECURE_NO_WARNINGS. Некоторый код лучше и правда никогда не
компилировать и не выпускать в продакшн
0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
14.02.2019, 14:18
IP_TCP, ну начинается опять борьба бобра с ослом (java\c, условно);
Цитата Сообщение от IP_TCP Посмотреть сообщение
это попытка сразу отучать
начинающих программистов
Вот наоборот совершенно. Начинающих нужно научить так никогда не делать. Начинающие, наверное, будут учиться, а не писать реальные программы?

Если вы целитесь и стреляете себе в ногу - виноват совсем не пистолет и не его предохранители.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.02.2019, 14:24
Цитата Сообщение от Folian Посмотреть сообщение
Если вы целитесь и стреляете себе в ногу - виноват совсем не пистолет и не его предохранители.
поддерживаю.
0
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
14.02.2019, 14:29
IP_TCP, с каких пор использование функций, не обязательных к реализации, стало хорошей практикой? Такой код нигде, кроме msvc, больше не компилируется. Приучать к использованию только msvc, и ничего больше? Нет, спасибо.

Если говорить о древности, тогда логичнее перейти к использованию std::string. Все остальное звучит не убедительно.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.02.2019, 14:32
Цитата Сообщение от valen10 Посмотреть сообщение
Если говорить о древности, тогда логичнее перейти к использованию std::string.
поддерживаю
1
Параллельный Кот
 Аватар для valen10
1905 / 827 / 350
Регистрация: 25.03.2016
Сообщений: 2,045
14.02.2019, 14:49
Имхо, инструменты должны работать так, как это необходимо пользователю. Когда инструмент начинает учить, это начинает раздражать. Сразу вспоминаю фрагмент из короткометражки "Виртуальная реальность" с нарезкой огурца
2
 Аватар для COKPOWEHEU
4079 / 2677 / 432
Регистрация: 09.09.2017
Сообщений: 11,888
14.02.2019, 14:51
IP_TCP, уж лучше пусть учатся небезопасным, но стандартным функциям, чем псевдо-безопасным и нестандартным.
Цитата Майкрософта про эти функции понятна, но стоит задуматься, почему эту "полезную" инициативу никто не поддержал. Может быть, потому, что эти функции добавляют больше проблем, чем пользы. Или потому, что почти все, что делается с их помощью, можно сделать и при помощи стандартных. Единственное исключение, которое я видел - ввод через scanf строки заранее неизвестного размера, но это крайне редкая ситуация.
А еще невольно задумываешься, зачем Майкрософт сознательно запрещают пользоваться стандартными функциями, то есть увеличивают несовместимость своего компилятора со всеми остальными.
1
"C with Classes"
2022 / 1404 / 523
Регистрация: 16.08.2014
Сообщений: 5,885
Записей в блоге: 1
14.02.2019, 14:57
valen10, чем совершенней инструмент тем тупее пользователь, это закон никуда не деться.

Добавлено через 1 минуту

Не по теме:

Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
зачем Майкрософт сознательно запрещают пользоваться стандартными функциями
проклятые деньги

0
Гвоздь Задиров
 Аватар для Folian
1718 / 1117 / 337
Регистрация: 25.01.2019
Сообщений: 2,940
14.02.2019, 14:59
Цитата Сообщение от COKPOWEHEU Посмотреть сообщение
увеличивают несовместимость
Вот скорее всего они для этого, нежели для "безопасности"; безопасность как маска.

Бизнесы всякие, хитрый план у них, скорее всего; не дураки ж у них сидят там.
//N.B. аналитик из меня не очень, так что это всё просто ИМХО.
0
611 / 416 / 151
Регистрация: 11.01.2019
Сообщений: 1,746
14.02.2019, 18:16
Цитата Сообщение от valen10 Посмотреть сообщение
Если говорить о древности, тогда логичнее перейти к использованию std::string. Все остальное звучит не убедительно.
Классический подход да еще и стандартный - самое оно!
0
Just Do It!
 Аватар для XLAT
4189 / 2644 / 654
Регистрация: 23.09.2014
Сообщений: 8,911
Записей в блоге: 3
14.02.2019, 19:58
Цитата Сообщение от valen10 Посмотреть сообщение
нарезкой огурца
спасибо, давно я так не ржал)))

такая хрень
C++
1
2
3
4
5
6
#ifdef __MINGW32__
    if ((picfile = fopen(fle_bmp, "rb")) == 0) ...;
#else
    //_MSC_VER
    if (fopen_s(&picfile, fle_bmp, "rb") != 0) ...;
#endif
меня всегда удручала)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
14.02.2019, 19:58
Помогаю со студенческими работами здесь

Массивы строк и функция strcpy
#include&lt;iostream&gt; #include&lt;cstring&gt; #include&lt;cctype&gt; using namespace std; int mystrcpy( char *stl ,char *str); int...

Что делает функция strcpy(t, f)
Функция strcpy(t, f) что она делает?

Функция strcpy () - строка должна быть пустой?
Здравствуйте! Возник вопрос: пусть имеются две непустые строки s1 и s2. Правильно ли копировать содержимое строки s2 в строку s1? Или...

Не работает функция gets(), strcpy() и другие функции с строками
Подключеные библиотеки все. MVS 2013. #include &lt;iostream&gt; #include &lt;cstring&gt; #include &lt;cctype&gt; using namespace std; int...

strcpy
Недавно начал программировать на C++, в типах плохо ещё разбираюсь... не могу понять, что надо исправить, чтобы код: char szSendBuff; ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru