Не могу понять, куда пропадает массив str2. Он просто забивается после исполнения функции strcopy(&str1, &str3, k1), хотя он даже там не используется

int kolsimv(char str[], int n) {
       bool flag = true;
       int k;
       k = strlen(str);
return k;

}

char vivod(char str[], int N, int M) {
    for (int i = N; i < M + N; ++i) {
          cout << str[i];
    }
cout << endl;
return 0;
}

void strcopy(char** str1, char** str3, int k1) {
    for (int i = 0; i < k1; ++i) {
    str3[i] = str1[i];
   }
}

void sort(char str[], int k1) {
      int* kod = new int[k1];
   for (int i = 0; i < k1; ++i) {
    kod[i] = (int)str[i];
}
for (int i = 0; i < k1; ++i) {
    cout << kod[i];
}
cout << endl;
int imax = 0;
for (int i = 1; i < k1; ++i) {
    if (kod[imax] < kod[i]) {
        imax = i;
    }
}

int param;

for (int j = 0; j < k1; j++) {
    for (int i = k1 - 1; i >= j; i--) {
        if (kod[i - 1] > kod[i]) {
            param = kod[i - 1];
            kod[i - 1] = kod[i];
            kod[i] = param;
        }
    }
}


for (int i = 0; i < k1; ++i) {
    cout << kod[i];

}
cout << endl;

for (int i = 0; i < k1; ++i) {
    str[i] = wchar_t(kod[i]);
  }

}



int main()
{
setlocale(LC_ALL, "Russian");
int k1;
int k2;
const int n1 = 50;
const int n2 = 50;
int n3 = 50;
int N, M;
int n4 = 200;
char str1s[999];
char str2s[999];
char* str1 = new char[n1];
 ``` char* str2 = new char[n2]; ``` 
char* str3 = new char[n3];
char str4[999];
cout << "Введите первую строку:\t";
cin >> str1;
strcpy_s(str1s, 999, str1);
cout << "Введите вторую строку:\t";
cin >> str2;
strcpy_s(str2s, 999, str2);
cout << "Введите номер начала вывода N:\t";
cin >> N;
cout << "Введите номер конца вывода M:\t";
cin >> M;
k1 = kolsimv(str1, n1);
k2 = kolsimv(str2, n2);
cout << "Количество символов в первой строке :\t" << k1 << endl;
cout << "Количество символов во второй строке :\t" << k2 << endl;
cout << "Вывод нужных символов из второй строки:\n";
vivod(str2, N, M);
  ``` strcopy(&str1, &str3, k1); ``` 
cout << "Вывод 3 строки, c добавлением в нее 1-ой:\t" << str3 << endl;
sort(str3, k1);
cout << "Вывод отсортированной по алфавиту 3 строки:\t" << str3 << endl;
strcpy_s(str4, 999, str1s);
strcat_s(str4, 999, str2s);
cout << "Вывод конкатенации 1 и 2-ой строк:\t" << str4 << endl;


int u = 0;
if (k1 > k2) {
    cout << "Первая строка не является частью второй строки" << endl;

}
else {

    if (strcmp(str1s, str2s) == 0) {
        cout << "строки 1 и 2 совпадают";
    }
    else {
        for (int j = 0; j < k1; ++j) {
            for (int i = 0; i < k2; ++i) {
                if (str1s[j] == str2s[i]) {
                    ++u;
                }

            }
        }

        if (u == k1) {
            cout << "Первая строка является частью второй" << endl;

        }
        else {
            cout << "Первая строка не является частью второй" << endl;

        }

    }
}
delete[] str1;
delete[] str2;
delete[] str3;
cout << endl;
return 0;

}

Ответы (1 шт):

Автор решения: Harry

Что за ерунду вы делаете в strcopy?!

Если вы хотели копировать k символов, то это делается так:

void strcopy(char* str1, char* str3, int k1) {
    for (int i = 0; i < k1; ++i) {
    str3[i] = str1[i];
   }
}

Хотя на самом деле для этого есть memcpy и strncpy.

Вы же попытались переписывать (читай - запарывать...) память рядом с переменной str3.

→ Ссылка