Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Visual C++/MFC/WTL > из CStringA в CString


Автор: IGanja 24.7.2007, 16:30
Код


CString sCase = "";

CDBVariant varValue; 
rs.GetFieldValue( i, varValue );

if( DBVT_NULL == varValue.m_dwType )
    sCase = _T( " IS NULL" );
else if( DBVT_ASTRING == varValue.m_dwType )
    sCase.Format( "%s", varValue.m_pstring );
 


Как не старался, какие знаки после "%" не ставил, значением sCase становять исключительно неприличные слова smile  А хотелосьбы всетаки правильное преобразование.

Автор: zkv 24.7.2007, 16:39
IGanja, вообще постановка вопроса неправильна:
Цитата

 из CStringA в CString

потому что программисту не нужно, по идее, знать о существовании CStringA и CStringW. 
Он только должен знать о существовании настроек юникода в проекте.
По поводу:
Цитата(IGanja @  24.7.2007,  16:30 Найти цитируемый пост)
Как не старался, какие знаки после "%" не ставил

чтобы вписать wchar_t*-строку в char*-строку юзай формат %ws

Автор: IGanja 24.7.2007, 16:51
Я бы и рад ничего не знать о существовании CStringA и CStringW. 

К сожалению %ws - не сработал

Спасибо zkv, проблема решилась сама собой

Автор: Coocky 25.7.2007, 12:58
zkv, была у меня одна ситуация.Проекты у меня всегда Юникод.Но попалась функция.где алгоритм должен был работать с АНСИ строкой.
Вот так примерно я сделал.
Код

LPCWSTR domm=(LPCWSTR) user_name.GetBuffer();
int d=WideCharToMultiByte(CP_ACP,0,domm,-1,NULL,NULL,NULL,NULL);
char *temp=new char [d];
WideCharToMultiByte(CP_ACP,0,domm,-1,(LPSTR)temp,d,NULL,NULL);
CStringA nm
nm.SetString(temp);
delete []temp;

Автор: Earnest 26.7.2007, 06:35
Не понимаю, чего вы паритесь. Строки обоих типов прекрасно друг в друга преобразовываются: у них есть шаблонные конструкторы и операторы присваивания. Вот этот код нормально компилируется и работает:

Код

   CStringA strA = "abc";
   CStringW strW(strA);
   strA = strW;


Конечно, все это правильно насчет WideCharToMultiByte и т.д., но это уже прописано внутри ATL\MFC.

Автор: Gun 6.9.2007, 00:23
У меня такой вопрос (может немного не по теме): Существуют ли в C++ команды аналог strtoint() в
inttostr() в Delphi то есть преобразование числа в строку и наоборот?

Автор: Andrey44 6.9.2007, 08:45
Смотри itoa(......) и atoi(......). smile 

Автор: zkv 6.9.2007, 08:57
а еще 
sprintf(), sscanf()
std::strstream
CString::Format(), CString::AppendFormat()
еще в boost'е что-то есть...

Автор: Greeen 6.9.2007, 11:31
boost::lexical_cast

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)