чего то я не пойму :(

><(((@> 11.04.2004 - 18:20 | вот есть класс точнее struct qa { int id; char *value; }; class CRule { public: int NQ, NA; // count of Q and A qa *Q; }; class CGramatic { public: int NRules; CRule *Rules; ... void LoadRule(int CurRule); }; в этом loadrule вот че делаю char buf[255]; fgets(s,255,f); if (strncmp(Q_STATE,s,2)==0) { fgets(s,255,f); sscanf(s,"%i",&n); Rules[CurRule].NQ = n; Rules[CurRule].Q = new qa[n]; for (i=0; i<Rules[CurRule].NQ; i++) { fgets(s,255,f); sscanf(s,"%s",&buf); Rules[CurRule].Q[i].value = new char[strlen(buf)]; Rules[CurRule].Q[i].value = buf; Rules[CurRule].Q[i].id = i; } } так вот при обращении к Gramatic.Rules[0].Q[i].value в main.cpp он мне пишет = ща точно скажу :) "яяяяНю|" = о какая годость
xaka 1 - 11.04.2004 - 19:00 | Если я правильно осмысливаю данные код, то ошибка на лицо: ты выделяешь память под буффер, где будет храниться строка. Далее ты делаешь - Rules[CurRule].Q[i].value = buf; тоесть присваиваешь указателю value адресс переменной buf. Т.к. эта переменная у тебя локальная, то она "удалится" после завершения работы функции и все, что в ней(переменной) было - изчезнит. А значит и указатель попортится, что приведет к неверным данным. Если я опять же понимаю что ты хочешь сделать, то ЗАМЕНИ: Rules[CurRule].Q[i].value = new char[strlen(buf)]; Rules[CurRule].Q[i].value = buf; НА: Rules[CurRule].Q[i].value = strdup(buf); У тебя тогда строка скопируется в value. Причем память выделится сама, но все равно незабуть очистить память в деструкторе. Ошибки при таком подходе не будет.
><(((@> 2 - 11.04.2004 - 20:26 | to xaka = тебе просто пямятник нужно поставить!!!!!!!!!!!!!!!! СПАСИБО!!!!!!!!!! а на счет того sscanf'a = я немного подругому сделал = СПАСИБО!!!!!!!!!!!

>>