0 / 2 / 1
Регистрация: 14.02.2011
Сообщений: 100
|
||||||
1 | ||||||
Как CString преобразовать к нормальной строке?15.01.2012, 15:02. Показов 2667. Ответов 8
Метки нет (Все метки)
0
|
15.01.2012, 15:02 | |
Ответы с готовыми решениями:
8
Как преобразовать числовые типы в CString и обратно с помощью MFC? Преобразовать float в CString Ошибка. Невозможно преобразовать CString в float Преобразовать отношение к 3-й нормальной форме СЧЕТ |
Silver
|
|
15.01.2012, 18:16 | 2 |
Что-то типа такого:
|
0 / 2 / 1
Регистрация: 14.02.2011
Сообщений: 100
|
|
18.01.2012, 14:32 [ТС] | 3 |
Вопрос вроде бы отпал, но все-равно на это:
lvi.pszText = (LPSTR)s; компилятор ругается, а на это: _tcscpy(lvi.pszText, s); не ругается.
0
|
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
|
|
18.01.2012, 20:43 | 4 |
(LPCSTR)s, (LPSTR)((LPCSTR)s)
или универсальные: (LPCTSTR)s или (LPTSTR)((LPCTSTR)s) а с копированием tcscpy надо быть поосторожнее, вдруг буфер lvi.pszText будет меньше чем строка s вообще в С++ при работе со строками следуют для начала понять: где происходит выделение массива символов, и кто заботиться о его удалении, а потом начинать манипуляции, не забывая о том что строка - это не бесконечный набор символов, а массив ограниченной длинны (к классам CString и string вышесказанное не относится) Удачи, Владимир
0
|
Silver
|
|
19.01.2012, 10:23 | 5 |
ВЫ невнимательны, друзья мои!
Я говорил не о ПРИВЕДЕНИИ к типу LPSTR - (LPSTR)s, а об операторе LPCSTR(s). Видите разницу? А вот первоисточник, дабы не быть голословным: |
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
|
|
19.01.2012, 11:47 | 6 |
Silver, ты сам невнимателен!
Ты говорил не об операторе LPCTSTR, а об операторе LPCSTR, первым про LPCTSTR сказал я! хе-хе. Впрочем, если компилировать не для Unicode, то это одно и тоже, хотя я бы рекомендовал писать LPCTSTR, мало ли, вдруг придется перекомпилировать программу в Unicode в скором времени. Кстати про приведение и оператор... для C++ - это одно и то же. При приведении к типу LPCTSTR объекта класса CString будет вызван оператор LPCTSTR данного класса В твоем же описаннии, что ты вырезал из MSDN, написано в самом первом предложении "This useful casting operator". casting - это и есть приведение типов по-английски. С уважением, Владимир
0
|
7 / 7 / 12
Регистрация: 13.02.2007
Сообщений: 1,255
|
|
19.01.2012, 11:56 | 7 |
P.S. ошибка при компиляции у arist''а возникала скорее всего потому, что он приводил к LPSTR, а не к LPCSTR/LPCTSTR. Ключевым здесь являлась буква C - constant. У класса CString нет оператора который бы приводил к указателю на буфер который можно было бы изменять, только на неизменяемый (отюсда C).
Но структура LVITEM требует именно pszText - изменяемую строку (даже если она не меняет эту строку, так сложилось, исторически ), поэтому LPCSTR не подойдет. Есть 2 способа, можно схитрить и привести LPCSTR повторно к LPSTR, а можно создать новый буфер, скопировать в него строку и передать структуре LVITEM. Я бы пошел вторым путем, хотя первый выглядит быстрее с точки зрения реализации, хотя и менее безоспасным. arist почти добрался до второго способа, хотя я не увидел, где происходит выделение буфера, в коде приведен только оператор копирования. Если arist не выделяет массив символов, то у него могут возникнуть проблемы в будущем при работе его программы. э-эх..
0
|
Silver
|
|
19.01.2012, 13:17 | 8 |
Я написал "типа", так как точно не помнил.
|
0 / 2 / 1
Регистрация: 14.02.2011
Сообщений: 100
|
|
20.01.2012, 08:13 [ТС] | 9 |
За кого вы меня держите! :-)
Естественно где-то в моих многоточиях есть оператор типа lvi.pszText = new char[100]; Спасибо за подробные разъяснения.
0
|
20.01.2012, 08:13 | |
20.01.2012, 08:13 | |
Помогаю со студенческими работами здесь
9
Преобразовать отношение к третьей нормальной форме Рейс Удвоить слеши в строке CString Как преобразовать long 12345 в CString "12345"? Регулярные выражения, Поиск всех видов чисел в строке, CString Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |