#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-- закомментить - не сегфолтится. Пробовал его и со звёздочкой вызывать, и без - результат один и тот же.






