как правильно отформатировать WideString, используя sprintf или wprintf - PullRequest
1 голос
/ 23 ноября 2011

Я использую этот код для форматирования WideString, но безуспешно! Он печатает неожиданные результаты: (

вот мой код

WideString s;
dep=new TStringList();
while(!DM->tDepPln->Eof)
    {
    //where tDepPlnFltNo is mysql field type of WideString
        s.sprintf(L"%-11S",DM->tDepPlnFltNo->AsWideString);
        dep->Add(s);
        DM->tDepPln->Next();
    }

когда я использую s.sprintf(L"%-11S","blablabla");, это работает, но когда я устанавливаю в MySQL тип поля WideString, это не так !! Я думаю, что проблема с преобразованием!

Как это исправить ???

1 Ответ

2 голосов
/ 24 ноября 2011

Ваш спецификатор формата использует прописные буквы S, которые сообщают вариантам Unicode функций ...printf() (например, те, которые используются внутри WideString:::sprintf()) ожидать char* вместо wchar_t* (и Ansi...printf() функций, ожидающих wchar_t* вместо char*).Вот почему s.sprintf(L"%-11S","blablabla") работает - вы передаете ему char*.

Для того, что вы пытаетесь, вам нужно вместо этого использовать строчную s.Вам также необходимо использовать метод WideString::c_bstr() при передаче значения WideString в функцию ...printf(), например:

s.sprintf(L"%-11s", DM->tDepPlnFltNo->AsWideString.c_bstr());
...