错误:' char *'的分配不兼容的类型到#char; char [4000]'

时间:2015-07-17 14:29:30

标签: c++ incompatibletypeerror

我一直试图解决一个简单的问题,但我无法理解为什么我的程序无法正常工作。我想连接一个字符串。 你能帮助我吗?如果是这样,你能解释一下为什么它不起作用吗?

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

3 个答案:

答案 0 :(得分:2)

$scope.posts = $firebaseArray(ref)strcpy直接作为第一个参数传入的指针,然后返回也可以链接调用。因此,将其结果分配回目标指针是多余的。在这种情况下,它也无效,因为您无法重新分配数组。

修复方法是不分配这些调用的返回值:

strcat

但是,由于您使用的是C ++,因此应该使用strcpy(aux,b); strcat(b,a); strcpy(a,aux); 代替,这为您的字符串数据提供了很好的价值语义。

答案 1 :(得分:1)

你做不到(见2)

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

因为aux不是指针,而是数组。你可以将它作为指针参数传递(参见1),但你不能“收集”结果“在”内部辅助(参见2)。

正如其他建议的那样,只需删除“集合”,它就会按预期工作。

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

另外,您将C和C ++混合在一个文件中。

也可能存在缓冲区溢出的可能性。

答案 2 :(得分:0)

#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