char* -> STL string

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
Victor
Сообщения: 6
Зарегистрирован: 21 мар 2006, 14:59

Подскажите пожалуйста как перевести?
такая штука почему-то пишет в strTmp только первый символ:

TCHAR* strChr "12";
string strTmp(strChr);
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

std::string s1 = std::string(pChar);
Victor
Сообщения: 6
Зарегистрирован: 21 мар 2006, 14:59

странно, в обычной ситуации преобразование прокатывает:
TCHAR* tmp1 = "qwer";
string tmp2(tmp1);
cout << tmp2;

но в моём случае это почему-то не проходит:

char s[256];
StreamRead = fopen( "file.txt", "r" );
fscanf(StreamRead, "%S", s);
CCell cell(s);

вот конструктор CCell:
CCell::CCell(const TCHAR* strCell)
{
string strTmp = string(strCell);//здесь strCell = "12", а strTmp = "1"
}
Victor
Сообщения: 6
Зарегистрирован: 21 мар 2006, 14:59

кстати, scanf как-то странно читает из файла строку "12":
31 00 32 00 00 00 (т.е. 1.2...)
думаю из-за этих 00 считывается только 1-й символ, если так, то как в этом случае быть?
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Ты, видимо, компилишь проект в конфигурации UNICODE. Тебе нужно отключить UNICODE, чтобы правильно компилился проект. Либо использовать специальные функции для работы с текстом в обоих конфигурациях.
Victor
Сообщения: 6
Зарегистрирован: 21 мар 2006, 14:59

ключ _MBCS
Аватара пользователя
WinMain
Сообщения: 929
Зарегистрирован: 14 янв 2005, 10:30
Откуда: Москва
Контактная информация:

Несложно проверить. В коде функции напиши

Код: Выделить всё

const int c = sizeof(TCHAR);
, а потом в отладчике посмотри чему будет равен размер символа. Возможно сам текст в файле сохранён как UNICODE.
Victor
Сообщения: 6
Зарегистрирован: 21 мар 2006, 14:59

WinMain, спасибо! Проблема действительно была с неправильной обработкой юникода.
По ходу дела возникает вопрос: как корректно считать с юникодовский файл?
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Используй std::wstring
2B OR NOT(2B) = FF
Ответить