С++ _TCHAR szTestString[] Как присвоить значение строки
Вот так работает _TCHAR szTestString[] = _T("132.423.432:8181");
А как присвоить string, пишет ошибку "для агрегатного объекта требуется инициализация с использованием {...}"
Ответы (2 шт):
Если вам нужно из _TCHAR в std::string, тогда как-то так
_TCHAR tstr[] = _T("132.423.432:8181");
std::string str(tstr, tstr + sizeof(tstr) / sizeof(TCHAR));
Если вам нужно "132.423.432:8181" в std::string, тогда так
std::string str("132.423.432:8181");
В зависимости от настроек использования Юникода в проекте запись
_TCHAR szTestString[] = _T("132.423.432:8181");
разворачивается препроцессором в
char szTestString[] = "132.423.432:8181"; // без Unicode
wchar_t szTestString[] = L"132.423.432:8181"; // c Unicode
Если уже имеется объект std::string или std::wstring, то поступить можно двумя способами:
- Получить указатель на низлежащую строку, вызвав метод
c_str() - Скопировать содержимое строчки в массив на стеке, если вдруг он позарез нужен:
char szTestString[18] = { 0 };
strcpy_s(szTestString, sMyStdString.c_str());
// или
wchar_t szTestString[18] = { 0 };
wcscpy_s(szTestString, sMyStdWstring.c_str());
Если же нужно попросту инициализировать строку, то никто не мешает сделать так:
std::string str = "132.423.432:8181";
std::wstring wstr = L"132.423.432:8181";
Ну либо так:
#ifdef UNICODE // возможно _UNICODE
# define tstring wstring
#else
# define tstring string
#endif
// ...
std::tstring str = _T("132.423.432:8181");
PS: по поводу std::string везде и всюду - в программировании под Windows - не самая лучшая практика. Как минимум по причине повсеместного использования юникода в винде - тогда уж std::wstring лучше, но и тут есть свой минус - std::basic_string - штука довольно медленная (по крайней мере в реализации STL от Microsoft, поэтому если важна производительность, то лучше оперировать голыми строчками. Однако, если производительность не сильно важна, то можно и их использовать, но надо помнить, что WinAPI - штука сишная, там нужно часть будет звать методы c_str() и data(), а также помнить, что при изменении размера строки адрес внутренней сишной строчки меняется и инвалидирует полученные ранее указатели на неё.