powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / размер CString
19 сообщений из 19, страница 1 из 1
размер CString
    #32267397
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ!
Подскажите, как можно увеличить размер CString? Можно ли как-нибудь указать его явно?
...
Рейтинг: 0 / 0
размер CString
    #32267431
keisik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
char chData[255]="asasasa...asasasa";
CString s;
strcopy(s.GetBuffer(255),chData);
s.ReleaseBuffer();
или s.ReleaseBuffer(255); если не уверены, что помещённая внутрь строка будет null-terminated.
...
Рейтинг: 0 / 0
размер CString
    #32267476
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Дело в том, что мне нужно изначально установить размер CString, а потом уже производить с ним различные операции (+, присваивание и т.д.)
...
Рейтинг: 0 / 0
размер CString
    #32267577
Tracer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AllocBuffer(int nLen)
или
AllocBeforeWrite(int nLen)
...
Рейтинг: 0 / 0
размер CString
    #32267746
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Даже если я пытаюсь работать изначально например с char arr[1024] - все равно массив обрезается на 255!
...
Рейтинг: 0 / 0
размер CString
    #32267774
keisik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
подробнее:
char chData[1024]="asasasa...asasasa";
CString s;
char* chPointerToInternBuffer=s.GetBuffer(1024);//задаём размер внутреннего буффера 1024 и получаем прямой указатель на него.
strcopy(chPointerToInternBuffer,chData);//копируем в него данные
s.ReleaseBuffer();//сообщаем о завершении прямой работы с буффером и позволяем CString-у самому узнать длину записанной строки с помощью вызова strlen (для этого нужно быть уверенным, что строка заканчивается на 0)
или s.ReleaseBuffer(1024); если не уверены, что помещённая внутрь строка будет null-terminated, то сами указываем длину скопированных данных.

Но думаю, что даже если задать ему размер буфера, то при присвоении короткой строки он всё равно обрежется, так что есть ли смысл?
...
Рейтинг: 0 / 0
размер CString
    #32267927
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fara
Ты бы привёл кусок текста программы, который не работает.
...
Рейтинг: 0 / 0
размер CString
    #32267929
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Смысл то есть. Мне необходимо создать таблицу с некоторым, достаточно большим, набором полей в dbf. Но видимо ExecuteSQL все равно давится на определенном кол-ве символов. Не знаете, как с этим бороться?
...
Рейтинг: 0 / 0
размер CString
    #32267978
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fara
А как ты узнал, что она обрезается на 255м символе?
...
Рейтинг: 0 / 0
размер CString
    #32267993
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Методичным топаньем по дебагеру и просмотром присвоения всех символов:(
...
Рейтинг: 0 / 0
размер CString
    #32268042
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит " просмотром присвоения всех символов "? Ты написал в цикле переприсвоение всех символов строки в отдельную односимвольную переменную и просматриваешь её? Или всё-таки смотришь всю строку в отладчике?

Если второй вариант, то у меня для тебя хорошая новость: отладчик показывает не всю CString, это я видел неоднократно. Насчёт ровно 255 не поручусь, но не всю.

Выведи в MessageBox.
...
Рейтинг: 0 / 0
размер CString
    #32268079
YuriAM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если хочешь видеть в отладчике, присвой другой CString куски по 255 длине.
И увидишь чудо :-)))
...
Рейтинг: 0 / 0
размер CString
    #32268345
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за информацию:)
Ошибку все равно пришлось обходить, потому что ExecuteSQL не ест длинные строки:(
...
Рейтинг: 0 / 0
размер CString
    #32268754
Shrike
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
"потому что ExecuteSQL не ест длинные строки:("
Да ест он и ещё как ;)
а CString я заполняю через CString.Format(), пока не подводил
...
Рейтинг: 0 / 0
размер CString
    #32269348
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, ест, неоднократно делал.

Ты бы всё-таки привёл этот SQL, и что за сообщение об ошибке.
Источник, говоришь, dbf-овский?
...
Рейтинг: 0 / 0
размер CString
    #32269598
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ExecuteSQL у меня нормально все ест при работе с тем же SQL Server, а вот с dbf не хочет. такое ощущение, что просто база не принимает. ибо выдает синтаксический егор на запросе. А при сокращении длины запроса все работает нормально. Приходится выдавать ему кусками. а это тормозит естественно сильно:(
...
Рейтинг: 0 / 0
размер CString
    #32269684
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну по крайней мере CString реабилитирован :)

Почему ты не хочешь привести SQL-выражение? Оно у тебя что, с секретной правой частью?
...
Рейтинг: 0 / 0
размер CString
    #32269876
Fara
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да просто в нем нет ничего выдающегося:))
"create table ttt (..." а дальше строится динамически, в зависимости от входных данных (имеется ввиду кол-во колонок, название и тип.)
Если я подставляю одну-две колонки (с любыми типами и именами) - все ок. А если больше - все умирает. и приходится потом мучится с alter table... add:((((
...
Рейтинг: 0 / 0
размер CString
    #32270170
Ой Вэй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да просто в нем нет ничего выдающегося
Есть, раз он не выполняется.
В общем, твоё дело, ты мучаешься, не я. Но если бы ты его прислал, я бы смог проверить, а так остаётся только сказать "так не бывает".

Функция для трассировки длинных строк прилагается :)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
void TRACELONG(CString c)
{
    if(!c.IsEmpty())
    {
        const int nMax =  73 ,nMin =  50 ,N = c.GetLength();
              int nChIn = min(nMax,N);
        CString   cProm = c.Mid( 0 ,nChIn);
        const int nSpaceI = cProm.ReverseFind(' ' );
        const int nBreakI = cProm.Find       ( "\n" );

        if(nBreakI != - 1 )
            nChIn = nBreakI;
        else if(nSpaceI != - 1  && nSpaceI > nMin)
            nChIn = nSpaceI;

        CString cSubStr = cProm.Mid( 0 ,nChIn+ 1 );
        if(nBreakI == - 1 )
            cSubStr +=  "\n" ;
        else
            nChIn++;

        TRACE(cSubStr);
 
        c = c.Mid(nChIn);

        TRACELONG(c);  //рекурсия
    }
};
...
Рейтинг: 0 / 0
19 сообщений из 19, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / размер CString
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]