Автор: exp (18.12.2008 в 11:43)
я и сам тут пробую разобраться ,) можно заменить strlen() на свою strlen() такую как дальше в коде
попробовал теперь пересобрать проект как с++
и опять не пойму почему не все переменные адекватно перемениваются .)
#include <stdio.h>
#include <conio.h> // detch()
int strlen(char *s) {
int y = 0;
while(s[y] != 0) y++;
return y;
}
typedef struct xstr{
char *v;
int size;
int count;
xstr(int sz, char * str) {
v = new char[size=sz]; // выделение памяти
count = strlen(str);
}
~xstr() { delete v; }
} xstr;
typedef struct ystr{
char *v;
int size;
int count;
ystr(int sz) { v = new char[size=sz]; // выделение памяти
count = 0;
}
~ystr() { delete v; }
} ystr;
int main() {
ystr ybf(512);
ybf.v = "1234567890 1234567890";
printf("\n ybf.count %i\n ybf.size %i\n strlen %i\n\n"
, ybf.count, ybf.size, strlen(ybf.v));
xstr bf(512, ybf.v);
printf("\n bf.count %i\n bf.size %i\n strlen %i\n\n"
, bf.count, bf.size, strlen( bf.v ));
getch();
return 0;
} |
Никак не соображу почему с объектом bf strlen( bf.v ) возвращает как-будто размер обьекта а не строки
и как-нибудь можно-ли оптимально сделать так чтобы при создании объекта не надо было-бы указывать сколько памяти выделять, а автоматически выделялось-бы,
и как добавить метод strlen() или переопределить какой-нибудь оператор, чтобы возвращало размер строки ?