ошибка: несовместимые типы при присвоении ‘char *’ к ‘char [4000]’

Я пытался решить простую проблему, но я не могу понять, почему моя программа не работает. Я хочу объединить строку.
Вы можете мне помочь? Если да, можете ли вы объяснить мне, почему это не работает?

#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;
ifstream in("sirul.in");
ofstream out("sirul.out");
char a[4000]="a",b[4000]="b",aux[4000];
int main()
{ int n,i;
in>>n;
if(n==1)out<<"a";
if(n==2)out<<"b";
for(i=3;i<=n;i++)
{
aux=strcpy(aux,b);
b=strcat(b,a);
a=strcpy(a,aux);
}

return 0;
}

0

Решение

strcpy а также strcat работать непосредственно с указателем, который вы передаете в качестве первого аргумента, а затем возвращать, чтобы вы могли связывать вызовы. Таким образом, присвоение их результата указателю назначения является излишним. В этом случае это также неверно, так как вы не можете переназначить массив.

Исправление состоит в том, чтобы просто не назначать возвращаемое значение этих вызовов:

strcpy(aux,b);
strcat(b,a);
strcpy(a,aux);

Однако, так как вы используете C ++, вы должны использовать std::string вместо этого, что дает вам хорошую семантику значений для ваших строковых данных.

2

Другие решения

вы не можете сделать (см. 2)

char b[4000]="b";
char aux[4000];
aux /* 2 */ = strcpy(aux /* 1 */ , b);

потому что aux не указатель, а массив. вы можете передать его в качестве аргумента-указателя (см. 1), но вы не можете «собрать» результат «внутри» aux (см. 2).

Как и другие, просто удалите «коллекцию», и она будет работать так, как вы ожидаете.

char b[4000]="b";
char aux[4000];
strcpy(aux /* 1 */ , b);
// or even:
const char *s = strcpy(aux /* 1 */ , b);

Также вы смешиваете C и C ++ в одном файле.

Также, вероятно, существует возможность переполнения буфера.

1

#include <iostream>
#include <cstring>
#include <fstream>

using namespace std;
ifstream in("sirul.in");
ofstream out("sirul.out");
char a[4000]="a",b[4000]="b",aux[4000];
int main()
{
int n,i;
cin>>n;
if(n==1)cout<<"a";
if(n==2)cout<<"b";
for(i=3;i<=n;i++)
{
strcpy(aux,b);
strcat(b,a);
strcpy(a,aux);
}

return 0;
}

проверьте определение os strcpy, должно быть cin и out должно быть cout

0