#include <string.h>
#include <iostream>
using namespace std;
const int ARL=255;
class String{
char* s[];
public:
String(char *s1){
s=new char[ARL];
strcpy(s,s1);
}
String(){
cout<<"Введите строку:";
s=new char[ARL];
cin>>s;
}
~String(){
delete[] s;
}
int len(){
for (int i=0;i<ARL;i++)
if (s[i]==0)
return i;
return -1;
}
int len(char* s1){
int l=sizeof(*s1);
for (int i=0;i<l;i++)
if (s1[i]==0)
return i;
return -1;
}
void operator--(){
int l=this->len();
int j;
for(int i=0;i<l;i++){
........
}
}
..............
};
int main(){
char* s=new char[255];
cout<<"Введите начальную строку:"<<endl;
cin>>s;
String* s1=new String(s);
s1->print();
*s1--;
s1->print();
...................
return 0;
}
Первый раз метод len вызывается корректно. При втором - сразу сегфолт. С помощью gdb выяснил, что s почему-то присваивается между этими вызовами адрес 0x21. Где и как - хоть убейте, не пойму. Если s1-- закомментить - не сегфолтится. Пробовал его и со звёздочкой вызывать, и без - результат один и тот же.