class StrRus
Char* stroka;
public:
.....
Char* filter(char* s)
{
.....
return str;
}
.....
StrRus operator+ (char* s)
{
char* s_lev=new char[sizeof stroka];
strcpy(s_lev,stroka);
delete[] stroka;
char* stroka=new char[sizeof s_lev+sizeof s];
strcpy(stroka,s_lev);
strcat(stroka, filter(s));
delete[] s_lev;
return *this;
}
[c++] проблемы с работой с char*
Нужно прибавить к строке класса отфильтрованную (только русские буквы) строку. Вот я перегрузила оператор +, но когда запускаю толком ничего не работает. Подскажите, что я не так пишу в этом операторе. Насколько я понимаю, что то не так с работой с памятью.
а у тебя он зачем-то меняет существующие. Твой код - это скорее +=, а не +
кроме того здесь:
char* stroka=new char[sizeof s_lev+sizeof s];
массив увеличивается на sizeof s, а
длина строки-результата должна увеличиться на sizeof filter(s)
Я бы так написал:
Код:
StrRus operator+ (char* s)
{
char* filterS = filter(s);
char* ans=new char[strlen(stroka)+strlen(filterS)+1];
strcpy(ans,stroka);
strcat(ans, filterS);
return new StrRus(ans);
}
{
char* filterS = filter(s);
char* ans=new char[strlen(stroka)+strlen(filterS)+1];
strcpy(ans,stroka);
strcat(ans, filterS);
return new StrRus(ans);
}
1.http://forum.codenet.ru/showthread.php?t=44194
2.А вот и твоя тема старая...:rolleyes: http://forum.codenet.ru/showthread.php?t=44045
Цитата: v0lkan0
Код:
StrRus operator+ (char* s)
{
char* s_lev=new char[sizeof stroka];
}
{
char* s_lev=new char[sizeof stroka];
}
Никогда не мерь длину строки sizeof-ом. sizeof - статическая конструкция, выдает размер переменной, размер которой известен в момент компиляции (в том числе массивы). stroka, s, и все другие переменные - вообще не массивы, и sizeof выдаст размер указателя, т. е. каждый раз одно и то же число (обычно 4).
P*t*, а я бы написал так:
Код:
const StrRus StrRus::operator+ (const char* s)
{
char* filterS = filter(s);
char* ans=new char[strlen(stroka)+strlen(filterS)+1];
strcpy(ans,stroka);
strcat(ans, filterS);
StrRus newstr (ans);
delete[] filterS;
delete[] ans;
return newstr;
}
{
char* filterS = filter(s);
char* ans=new char[strlen(stroka)+strlen(filterS)+1];
strcpy(ans,stroka);
strcat(ans, filterS);
StrRus newstr (ans);
delete[] filterS;
delete[] ans;
return newstr;
}
А твой код, мало того, что ошибочный, еще и не компилируется :) (что-то типа "return new StrRus(ans) : Cannot convert StrRus * to StrRus"