Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

[c++] проблемы с работой с char*

14K
17 декабря 2007 года
v0lkan0
32 / / 02.03.2007
Нужно прибавить к строке класса отфильтрованную (только русские буквы) строку. Вот я перегрузила оператор +, но когда запускаю толком ничего не работает. Подскажите, что я не так пишу в этом операторе. Насколько я понимаю, что то не так с работой с памятью.
Код:
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;
}
360
17 декабря 2007 года
P*t*
474 / / 15.02.2007
по идее оператор плюс должен создать и возвратить новый объект,
а у тебя он зачем-то меняет существующие. Твой код - это скорее +=, а не +
кроме того здесь:
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);
}
320
17 декабря 2007 года
m_Valery
1.0K / / 08.01.2007
За последнее время уже несколько раз обсуждали тему создания класса строк.
1.http://forum.codenet.ru/showthread.php?t=44194
2.А вот и твоя тема старая...:rolleyes: http://forum.codenet.ru/showthread.php?t=44045
350
18 декабря 2007 года
cheburator
589 / / 01.06.2006
Цитата: v0lkan0

 
Код:
StrRus operator+ (char* s)
{
    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;

}

А твой код, мало того, что ошибочный, еще и не компилируется :) (что-то типа "return new StrRus(ans) : Cannot convert StrRus * to StrRus"
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог