Я пытался решить простую проблему, но я не могу понять, почему моя программа не работает. Я хочу объединить строку.
Вы можете мне помочь? Если да, можете ли вы объяснить мне, почему это не работает?
#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;
}
strcpy
а также strcat
работать непосредственно с указателем, который вы передаете в качестве первого аргумента, а затем возвращать, чтобы вы могли связывать вызовы. Таким образом, присвоение их результата указателю назначения является излишним. В этом случае это также неверно, так как вы не можете переназначить массив.
Исправление состоит в том, чтобы просто не назначать возвращаемое значение этих вызовов:
strcpy(aux,b);
strcat(b,a);
strcpy(a,aux);
Однако, так как вы используете C ++, вы должны использовать std::string
вместо этого, что дает вам хорошую семантику значений для ваших строковых данных.
вы не можете сделать (см. 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 ++ в одном файле.
Также, вероятно, существует возможность переполнения буфера.
#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