Ошибка программы

207
01 апреля 2018, 20:45

Такие ошибки:

prog.cpp: In function ‘int main()’:

prog.cpp:20:32: error: ‘strcpy_s’ was not declared in this scope strcpy_s(pStr1, strSize1, str1); prog.cpp:38:37: error: ‘strcat_s’ was not declared in this scope strcat_s(pStr1, requiredSize, pStr2); prog.cpp: In function ‘char* giveNewMem(char*, int)’: prog.cpp:51:36: error: ‘strcpy_s’ was not declared in this scope strcpy_s(strInFunc, reqSize, pstr1);

#include <iostream>
#include <cstring>
using namespace std;
char* giveNewMem(char *pstr1, int reqSize);
int main()
{
    setlocale(LC_ALL, "rus");
    char* str1;
    char* str2;
    cout << "Enter first string:";
    cin >> str1;
    cout << "Enter second string:";
    cin >> str2;
    int strSize1 = strlen(str1) + 1;
    int strSize2 = strlen(str2) + 1;
    char* pStr1 = new char[strSize1];
    strcpy_s(pStr1, strSize1, str1);
    char* pStr2 = new char[strSize2];
    strcpy_s(pStr2, strSize2, str2);
    cout << "1)" << pStr1 << endl;
    cout << "2)" << pStr2 << endl << endl;
    cout << "pStr1 занимает " << strSize1 << " байт памяти c \\0" << endl;
    cout << "pStr2 занимает " << strSize2 << " байт памяти c \\0" << endl;
    int requiredSize = (strSize1 + strSize2) - 1;
    cout << "\nНеобходимо " << requiredSize << " байт памяти для объединения строк." << endl << endl;
    pStr1 = giveNewMem(pStr1, requiredSize); //функция, которая перевыделит память
    strcat_s(pStr1, requiredSize, pStr2);
    cout << "pStr1: " << pStr1 << endl << endl;
    delete[] pStr1; // освобождаем память, которая была перевыделена в функции для strInFunc 
    delete[] pStr2; // освобождаем память, которая была выделена в main 
    return 0;
}
char* giveNewMem(char *pstr1, int reqSize)
{
    char* strInFunc = new char[reqSize]; // для копирования строки pstr1 перед удалением памяти
    strcpy_s(strInFunc, reqSize, pstr1);
    delete [] pstr1; // освобождаем память pstr1
    return strInFunc;
}
Answer 1

strcpy_s - это не стандартная функция для языка С++, а расширение для компилятора Visual Studio. Такая функция есть в языке С (стандарт С11), но не в С++.

Answer 2

Скорее всего, вы работаете с GCC, но в нем эти функции не поддерживаются.

См., например, https://stackoverflow.com/a/40046076/9123401

Answer 3
char* str1;  //  и что?
char* str2;
cout << "Enter first string:";
cin >> str1; // вы серьезно?
cout << "Enter second string:";
cin >> str2;

У вас указатели ничем не инициализированы, не выделена область памяти под указатели... Что и куда вы вводите?...

сделайте например так:

char* str1;
istream_iterator<string> is(cin);
const size_t sz = is->size(); // размер строки
str1 = const_cast<char*>(is->c_str());
Answer 4

#include <string.h> нужно

Чтение документации, как это не странно, помогает. Тут вот https://msdn.microsoft.com/ru-ru/library/td1esda9.aspx написано какой заголовок подключать.

READ ALSO
Нечитаемые символы в cout

Нечитаемые символы в cout

Вот весь код, подскажите пожалуйста на каком этапе ломается читаемость и как это исправить?

186
Запуск Gitlab Runner для C++/Qt проекта на Mac OS

Запуск Gitlab Runner для C++/Qt проекта на Mac OS

Здравствуйте! Есть задача запустить Gitlab Runner для сборки C++/Qt проекта на Mac OSЗнаю, что для сборки просто C++ проекта можно использовать Nuget и MSBuild

192
Объясните, как работает этот foreach для tuple

Объясните, как работает этот foreach для tuple

Помогите разобраться, как работает функция обхода кортежа:

222
Is not valid win32 application

Is not valid win32 application

В общем когда запуская приложение высвечивается ошибка "is not valid win32 application"На просторах интернета ответов не нашёл по этому обращаюсь сюда

207