Search code examples
c++incompatibletypeerror

error: incompatible types in assignment of 'char*' to 'char [4000]'


I've been trying to solve an easy problem, but I can't figure why my program doesn't work. I want to concatenate a string. Can you help me? If so, can you also explain me why it doesn't work?

#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;
}

Solution

  • strcpy and strcat work directly on the pointer you pass in as the first argument, then also return is so that you can chain calls. As such, assigning their result back to the destination pointer is redundant. In this case, it's also invalid, as you can't reassign an array.

    The fix is to just not assign the return value of those calls:

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

    However, since you are using C++, you should use std::string instead, which gives you nice value semantics for your string data.