parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

Как вариант

Dimanchik 05.04.2010 07:01

Класс String и VString при создании не создают локальную копию переданной им строка, а просто получают указатель. Для корректной работы кода необходимо самостоятельно выделять область памяти для строки (GC_MALLOC_ATOMIC) и копировать содержимое (можно strcpy). ИНАЧЕ, при изминении содержимого переменной buffer меняется содержимое всех, созданных на основе buffer, строк типа String и, следовательно, VString, что собственно я и наблюдал.
char buffer[1024];

static void _GetWorkSpace(Request& r, MethodParams& )
{
	::GetWorkSpace(0,buffer);
	char * result = GC_MALLOC_ATOMIC(strlen(buffer)+1);
	strcpy(result,buffer);
	r.write_no_lang(String(result));
}

static void _GetPlanTitle(Request& r, MethodParams& )
{
	::GetPlanTitle(0buffer);
	char * result = GC_MALLOC_ATOMIC(strlen(buffer)+1);
	strcpy(result,buffer);
	r.write_no_lang(String(result));
}
Если есть более простые конструкции, прошу в студию.
Жду коментариев...