C++ 错误:分配';字符*';至';char[4000]和#x27;

C++ 错误:分配';字符*';至';char[4000]和#x27;,c++,incompatibletypeerror,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

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

#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;
}
#包括
#包括
#包括
使用名称空间std;
ifstream in(“sirul.in”);
流出(“sirul.out”);
字符a[4000]=“a”,b[4000]=“b”,辅助[4000];
int main()
{int n,i;
在>>n;

如果(n==1)out
strcpy
strcat
直接作用于作为第一个参数传入的指针,那么返回也是为了可以链接调用。因此,将它们的结果分配回目标指针是多余的。在这种情况下,它也是无效的,因为无法重新分配数组

解决方法是不分配这些调用的返回值:

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

但是,由于使用C++,所以应该使用<代码> STD::String ,这给字符串数据提供了良好的语义。<>代码> StrcPy < /C>和 StrCAS//Cord>直接在作为第一个参数传递的指针上工作,然后返回,以便可以进行链式调用。目标指针是冗余的。在这种情况下,它也是无效的,因为您无法重新分配数组

#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;
}
解决方法是不分配这些调用的返回值:

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

但是,由于使用C++,所以应该使用<代码> STD::String ,这给字符串数据提供了良好的语义。<>代码> StrcPy < /C>和 StrCAS//Cord>直接在作为第一个参数传递的指针上工作,然后返回,以便可以进行链式调用。目标指针是冗余的。在这种情况下,它也是无效的,因为您无法重新分配数组

#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;
}
解决方法是不分配这些调用的返回值:

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

但是,由于使用C++,所以应该使用<代码> STD::String ,这给字符串数据提供了良好的语义。<>代码> StrcPy < /C>和 StrCAS//Cord>直接在作为第一个参数传递的指针上工作,然后返回,以便可以进行链式调用。目标指针是冗余的。在这种情况下,它也是无效的,因为您无法重新分配数组

#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;
}
解决方法是不分配这些调用的返回值:

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

但是,由于使用C++,所以应该使用<代码> STD::String < /Cord>,这给字符串数据提供了良好的值语义。

#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;
}
#包括 #包括 使用名称空间std; ifstream in(“sirul.in”); 流出(“sirul.out”); 字符a[4000]=“a”,b[4000]=“b”,辅助[4000]; int main() { int n,i; cin>>n; 如果(n==1)不能
#包括
#包括
#包括
使用名称空间std;
ifstream in(“sirul.in”);
流出(“sirul.out”);
字符a[4000]=“a”,b[4000]=“b”,辅助[4000];
int main()
{
int n,i;
cin>>n;
如果(n==1)不能
#包括
#包括
#包括
使用名称空间std;
ifstream in(“sirul.in”);
流出(“sirul.out”);
字符a[4000]=“a”,b[4000]=“b”,辅助[4000];
int main()
{
int n,i;
cin>>n;
如果(n==1)不能
#包括
#包括
#包括
使用名称空间std;
ifstream in(“sirul.in”);
流出(“sirul.out”);
字符a[4000]=“a”,b[4000]=“b”,辅助[4000];
int main()
{
int n,i;
cin>>n;
如果(n==1)不能你不能做(见2)

因为aux不是指针,而是数组。您可以将其作为指针参数传递(请参见1),但不能“收集”aux内部的结果(请参见2)

正如其他人所建议的,只需删除“collection”,它就会如您所期望的那样工作

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

也可以在一个文件中混合C和C++。 也可能存在缓冲区溢出的可能性。

您不能这样做(参见2)

因为aux不是指针,而是数组。您可以将其作为指针参数传递(请参见1),但不能“收集”aux内部的结果(请参见2)

正如其他人所建议的,只需删除“collection”,它就会如您所期望的那样工作

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

也可以在一个文件中混合C和C++。 也可能存在缓冲区溢出的可能性。

您不能这样做(参见2)

因为aux不是指针,而是数组。您可以将其作为指针参数传递(请参见1),但不能“收集”aux内部的结果(请参见2)

正如其他人所建议的,只需删除“collection”,它就会如您所期望的那样工作

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

也可以在一个文件中混合C和C++。 也可能存在缓冲区溢出的可能性。

您不能这样做(参见2)

因为aux不是指针,而是数组。您可以将其作为指针参数传递(请参见1),但不能“收集”aux内部的结果(请参见2)

正如其他人所建议的,只需删除“collection”,它就会如您所期望的那样工作

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

也可以在一个文件中混合C和C++。


也可能有缓冲区溢出。

你应该考虑使用<代码> STD::String < /Cord>。我认为你的问题的标题很好地回答了为什么你的程序不编译。考虑用C++来代替C++程序,你不用使用C++所提供的其他东西——没有类,没有模板,没有。没有什么——至少使用C代码> <代码> >代码> >代码> in C数组。没有任何借口。你应该真正考虑使用<代码> STD::String < /Cord>。我认为你的问题的标题很好地回答了为什么你的程序不编译。考虑用C++来代替C++程序,你不用使用C++中的其他东西。你没有类,没有模板,没有什么——至少使用C代码> <代码> >代码> >代码> C数组。确实没有借口。你应该考虑使用<代码> STD::String < /Cord>。我认为你的问题的标题很好地解释了为什么你的程序不编译。考虑C++使用C++程序代替你使用的CIF。C++没有提供的其他东西——没有类,没有模板,没有什么——至少使用C代码< >代码>和<代码> <代码>