Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/203: Рейтинг темы: голосов - 203, средняя оценка - 4.73
3 / 2 / 1
Регистрация: 19.07.2009
Сообщений: 46

Как сформировать строку LPCTSTR?

27.09.2009, 16:20. Показов 40456. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сформировать строку LPCTSTR?
Раньше я это делал с помощью wsprintfA, но он не хавает константы. Что ж тогда делать?
Вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
    CFile myfile;
    int i;
    char *dir = new char[300];
    LPCTSTR sss = new TCHAR[300];
    char content[] = "Текст внутри файла";
    char source[] = "C:\\i";
    for (i=0; i<10; i++){
        wsprintfA(dir, "%s00%d", source, i);
        CreateDirectoryA(dir, NULL);
 
        //создать файл
        wsprintfA(sss, "%s\\file.txt", dir);
        myfile.Open(sss, CFile::modeCreate|CFile::modeWrite);
        myfile.Write(content, sizeof(content));
        myfile.Close();
    }
Или хотя бы подскажите как преобразовать LPTSTR в LPCTSTR (обычную строку в константную)?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
27.09.2009, 16:20
Ответы с готовыми решениями:

int->LPCTSTR && char->LPCTSTR
Подскажите как преобразовать int в LPCTSTR и char в LPCTSTR? Добавлено через 54 минуты Для int делаю так: int number = 7; ...

как преобразовать из ULONGLONG в LPCTSTR?
Здрасте! Хоxу вывести размер файла в List Control (MFC). Не могу преобразовать ULONGLONG в LPCTSTR. Помогите. ULONGLONG m_FileSize...

Как преобразовать std::string в LPCTSTR?
Вопрос задан в названии темы.

9
Эксперт С++
 Аватар для XuTPbIu_MuHTAu
2256 / 771 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
27.09.2009, 16:57
Mind31, а зачем ты объявил sss как константную? Неконстантную строку можно передать в функцию,требующую константную,но не наоборот.Суть в том,что функция дополнительно заявляет,что содержимое не изменится,что увеличивает как информативность так и некоторую безопасность данных. В общем, замени LPCTSTR на LPTSTR и все будет нормально.
1
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
27.09.2009, 17:05
Лучший ответ Сообщение было отмечено как решение

Решение

Поясняю опус от XuTPbIu_MuHTAu.
Новички не знают(а, точнее, не задумываются).

LPCTSTR и LPTSTR - это аббревеатуры в широко распространенной в С/С++ Венгерской Нотации.
LPCTSTR расшифровывается как Long PoinTer on ConsTant STRing - Дальний Указатель на Постоянную Строку
LPTSTR - как Long PoinTer on STRing - Дальний Указатель на Строку.
Разницу между просто строкой и постоянной строкой, я, думаю, пояснять не надо.

p.s. Всегда думайте, что именно вы пишите.
4
Эксперт С++
2924 / 1274 / 114
Регистрация: 27.05.2008
Сообщений: 3,465
27.09.2009, 18:44
Лучший ответ Сообщение было отмечено как решение

Решение

Надеюсь, коллега Patch не обидится, если я все же внесу уточнение.
Эти аббревиатуры идут из Microsoft Visual C++, где они широко применяются, и означают:
LPCTSTR - Long Pointer to Constant Text STRing,
LPTSTR - Long Pointer to Text STRing,
причем (важно!) определение Text зависит от макроса _TEXT (а он - зависит от макроса _UNICODE) и различается для ANSI и UNICODE строк. Аналогично, есть аббревиатуры:
LPCSTR и LPSTR - для ANSI-строк (элементы - char),
LPCWSTR и LPWSTR - для Unicode строк (элементы - wchar_t).
В зависимости от определения макроса _UNICODE в настройках проекта, LPCTSTR и LPTSTR означают либо LPCSTR и LPSTR, либо LPCWSTR и LPWSTR соответственно. Последнее (вкупе с "аккуратным" программированием функций обработки текста) позволяет одним изменением макроса _UNICODE в настройках препроцессора без каких-либо прочих подстроек компилировать уникодную и ansi-версии исполняемого кода из одного и того же набора исходников.
5
2343 / 499 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
27.09.2009, 19:15
Цитата Сообщение от CheshireCat Посмотреть сообщение
Надеюсь, коллега Patch не обидится, если я все же внесу уточнение.
Ни в коей мере.
...и аббревиатуры Microsoft идут целиком из Венгерской Нотации.
Ибо Чарльз Симони, который ее и приидумал, работал на Microsoft.
Это уже давно считается хорошим тоном программирования везде.
Респект за подробное описание.
1
3 / 2 / 1
Регистрация: 19.07.2009
Сообщений: 46
28.09.2009, 00:47  [ТС]
Спасибо. Разобрался. Всё время путаю эти LPCTSTR. Вот ведь напридумывают...
Лучше бы был один тип char и всем было бы хорошо. Или я не прав?

С кодом разобрался. Всё работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <atldbcli.h>       // для strlenT
 
    CFile myfile;
    int i;
    LPTSTR dir = new TCHAR[300];
    LPTSTR sss = new TCHAR[300];
    LPCTSTR content = L"Текст внутри файла";
    LPCTSTR source = L"C:\\i";
    for (i=0; i<10; i++){
        wsprintfW(dir, L"%s00%d", source, i);
        CreateDirectoryW(dir, NULL);
 
        //создать файл
        wsprintfW(sss, L"%s\\file.txt", dir);
        myfile.Open(sss, CFile::modeCreate|CFile::modeWrite);
        myfile.Write(content, strlenT(content)*sizeof(*content));
        myfile.Close();
    }
0
UNIX-way
 Аватар для Delphin_KKC
712 / 495 / 49
Регистрация: 15.01.2009
Сообщений: 1,720
28.09.2009, 00:52
Цитата Сообщение от Mind31 Посмотреть сообщение
Лучше бы был один тип char и всем было бы хорошо. Или я не прав?
Китайцы бы обиделись. Их иероглифы не представить одним байтом.
2
Рожденная для битвы
 Аватар для marina2
294 / 72 / 15
Регистрация: 08.11.2009
Сообщений: 1,272
11.07.2011, 18:01
Цитата Сообщение от Patch Посмотреть сообщение
LPCTSTR и LPTSTR - это аббревеатуры в широко распространенной в С/С++ Венгерской Нотации.
То есть вместо них можно использовать другие имена?
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
11.07.2011, 20:00
Цитата Сообщение от marina2 Посмотреть сообщение
То есть вместо них можно использовать другие имена?
const TCHAR * и TCHAR* соответственно.
1
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
12.07.2011, 13:41
Цитата Сообщение от CheshireCat Посмотреть сообщение
Эти аббревиатуры идут из Microsoft Visual C++, где они широко применяются, и означают:
LPCTSTR - Long Pointer to Constant Text STRing,
LPTSTR - Long Pointer to Text STRing,
Если уточнять, то я бы сказал Long Pointer to Tchar STRing.
Цитата Сообщение от Patch Посмотреть сообщение
...и аббревиатуры Microsoft идут целиком из Венгерской Нотации
Это уже давно считается хорошим тоном программирования везде
Не все так однозначно. Та же Майкрософт не так давно рекомендовала не использовать Венгерскую нотацию
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.07.2011, 13:41
Помогаю со студенческими работами здесь

Как из string получить LPCTSTR?
как из string получить LPCTSTR?

Как полностью расшифровывается слово LPCTSTR?
Не могу запомнить написание LP - (long pointer) длинный указатель STR - string (строка) А что означает CT?

Как сформировать строку?
У меня есть несколько файлов, которые нужно открыть. Как сформировать строку на С++? E:\patch\massiv\list.1 И в этой папке у меня...

Как сформировать строку в Qt
Всем привет!:) Такой вопрос Как в Qt сформировать строку с переменными? Что-то вроде CString str; ...

Как сформировать строку типа string
#include &lt;iostream&gt; #include &lt;string&gt; int main() { string s; s = 'a'; s = 'b'; s = '\0'; std::cout...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru