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

Как убрать ошибку strcpy_s

28.07.2022, 09:49. Показов 1068. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
#include <iostream>
#include <string.h>
 
using namespace std;
 
class StringsWork
{
private:
    char str[256];//строка, которая доступна классу
public:
    StringsWork()//конструктор в котором очистим строку класса от мусора
    {
        for (int i = 0; i < 256; i++)  str[i] = '\0';
    }
 
    void operator +(char*);//прототип метода класса в котором мы перегрузим оператор +
    void getStr();//метод вывода данных на экран
};
 
void StringsWork::operator +(char* s) //что должен выполнить оператор +
{
    strcat_s(str, s); //сложение строк
}
 
void StringsWork::getStr()
{
    cout << str << endl << endl;//вывод символьного массива класса на экран
}
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    const char* str1 = new char[strlen("У лукоморья дуб зелёный;\n") + 1]; //выделим память для строк
    const char* str2 = new char[strlen("Всё ходит по цепи кругом;\n") + 1];
    const char* str3 = new char[strlen("И днём и ночью кот учёный\n") + 1];
    const char* str4 = new char[strlen("Златая цепь на дубе том:\n") + 1];
 
    size_t len = strlen(str1);
    strcpy_s(str1, len + 2, "У лукоморья дуб зелёный;\n");//инициализируем
    strcpy_s(str2, len + 2, "Всё ходит по цепи кругом;\n");
    strcpy_s(str3, len + 2, "И днём и ночью кот учёный\n");
    strcpy_s(str4, len + 2, "Златая цепь на дубе том:\n");
 
    cout << "1) " << str1;
    cout << "2) " << str2;
    cout << "3) " << str3;
    cout << "4) " << str4 << endl;
 
    StringsWork story;//создаем объект и добавяем в него строки с помощью перегруженного +
    story + str1;
    story + str4;
    story + str3;
    story + str2;
 
    cout << "========================================" << endl;
    cout << "Стих, после правильного сложения строк: " << endl;
    cout << "========================================" << endl << endl;
    story.getStr();
 
    //Отмечу, что для числовых типов данных оператор плюс будет складывать значения, как и должен
    int a = 5;
    int b = 5;
    int c = 0;
 
    c = a + b;
    cout << "========================================" << endl << endl;
    cout << "a = " << a << endl << "b = " << b << endl;
    cout << "c = " << a << " + " << b << " = " << c << endl << endl;
 
    delete[] str4;//освободим память
    delete[] str3;
    delete[] str2;
    delete[] str1;
 
    return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.07.2022, 09:49
Ответы с готовыми решениями:

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

Выдает ошибку: error C4996: 'strcpy': This function or variable may be unsafe. Consider using strcpy_s instead
Уважаемые форумчане! У меня не работает программа. Все написано &quot;вроде&quot; правильно. Выдает ошибку: error C4996: 'strcpy': This function...

Strcpy_s выдает ошибку L Buffer is too small & & 0
strcpy_s выдает ошибку L Buffer is too small &amp; &amp; 0 22 строка #include &lt;iostream&gt; #include &lt;clocale&gt; #include &lt;ctime&gt; int main...

7
49 / 39 / 11
Регистрация: 24.07.2022
Сообщений: 117
28.07.2022, 11:12
В strcat_s вторым параметром надо размер str передать
0
Модератор
Эксперт С++
 Аватар для zss
13773 / 10966 / 6491
Регистрация: 18.12.2011
Сообщений: 29,245
28.07.2022, 11:48
не по теме вопроса,
а почему нужно было огород городить, вместо
C++
1
2
3
4
5
6
7
8
9
int main()
{
    setlocale(LC_ALL, "rus");
 
    char str1[] = "У лукоморья дуб зелёный;\n";
    char str2[] = "Всё ходит по цепи кругом;\n";
    char str3[] = "И днём и ночью кот учёный\n";
    char str4[] = "Златая цепь на дубе том:\n";
....
?????
0
28.07.2022, 14:34

Не по теме:

стихов будет много, а значит массив должен быть динамический

0
Модератор
Эксперт CЭксперт С++
 Аватар для Volga_
5209 / 2927 / 1509
Регистрация: 14.12.2018
Сообщений: 5,267
Записей в блоге: 1
28.07.2022, 15:14
lilika333, вы не смогли записать с strcpy_s() для содержаний, которые отметят констант ! Поэтому нужно убрать ключевое слово const в строках 34...37.
0
0 / 0 / 0
Регистрация: 06.06.2022
Сообщений: 14
28.07.2022, 19:22  [ТС]
Нужны еще версии!
0
49 / 39 / 11
Регистрация: 24.07.2022
Сообщений: 117
28.07.2022, 23:41
Цитата Сообщение от lilika333 Посмотреть сообщение
Нужны еще версии!
Какие еще версии, strcat_s, в отличии от strcat, принимает 3 аргумента, куда копировать, размер этого куда и источник
0
Just Do It!
 Аватар для XLAT
4211 / 2668 / 655
Регистрация: 23.09.2014
Сообщений: 9,082
Записей в блоге: 3
29.07.2022, 00:37
Цитата Сообщение от dmiteri Посмотреть сообщение
Какие еще версии
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <iostream>
#include <string.h>
 
using namespace std;
 
class StringsWork
{
private:
    char str[256];//строка, которая доступна классу
public:
    StringsWork()//конструктор в котором очистим строку класса от мусора
    {   str[0] = 0;
    }
 
    void operator +(char*);//прототип метода класса в котором мы перегрузим оператор +
    void getStr();//метод вывода данных на экран
};
 
void StringsWork::operator +(char* s) //что должен выполнить оператор +
{
    strcat_s(str, 255, s); //сложение строк
}
 
void StringsWork::getStr()
{
    cout << str << endl << endl;//вывод символьного массива класса на экран
}
 
int main()
{
    setlocale(LC_ALL, "rus");
 
    char* str1 = new char[strlen("У лукоморья дуб зелёный; \n") + 1]; //выделим память для строк
    char* str2 = new char[strlen("Всё ходит по цепи кругом;\n") + 1];
    char* str3 = new char[strlen("И днём и ночью кот учёный\n") + 1];
    char* str4 = new char[strlen("Златая цепь на дубе том: \n") + 1];
 
    size_t         len = strlen("У лукоморья дуб зелёный; \n") + 1;
    strcpy_s(str1, len, "У лукоморья дуб зелёный; \n");//инициализируем
    strcpy_s(str2, len, "Всё ходит по цепи кругом;\n");
    strcpy_s(str3, len, "И днём и ночью кот учёный\n");
    strcpy_s(str4, len, "Златая цепь на дубе том: \n");
 
    cout << "1) " << str1;
    cout << "2) " << str2;
    cout << "3) " << str3;
    cout << "4) " << str4 << endl;
 
    StringsWork story;//создаем объект и добавяем в него строки с помощью перегруженного +
    story + str1;
    story + str4;
    story + str3;
    story + str2;
 
    cout << "========================================" << endl;
    cout << "Стих, после правильного сложения строк: " << endl;
    cout << "========================================" << endl << endl;
    story.getStr();
 
    //Отмечу, что для числовых типов данных оператор плюс будет складывать значения, как и должен
    int a = 5;
    int b = 5;
    int c = 0;
 
    c = a + b;
    cout << "========================================" << endl << endl;
    cout << "a = " << a << endl << "b = " << b << endl;
    cout << "c = " << a << " + " << b << " = " << c << endl << endl;
 
    delete[] str4;//освободим память
    delete[] str3;
    delete[] str2;
    delete[] str1;
 
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.07.2022, 00:37
Помогаю со студенческими работами здесь

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

Как правильно задействовать strcpy_s вместо strcpy?
Имеется простой класс, да, strcpy отрабатывает корректно, но, хотелось бы понять, как правильно задействовать strcpy_s вместо strcpy, что...

error c2731 winmain функция не может быть перегружена. Как убрать данную ошибку?
error c2731 winmain функция не может быть перегружена. Как убрать данную ошибку?

Как убрать ошибку при обнулении поля
Добрый день. Сделал программу, но столкнулся с тем что при обнулении поля программа не может это решить и выдает ошибку, как сделать так...

Как убрать ошибку
Начал заниматься по книге Васильева А.Н. Программирование для начинающих на С#, первая программа сразу выдает ошибку, помогите пожалуйста...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru