powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Приведение массива char[] (или char* ) в LPCTSTR
7 сообщений из 7, страница 1 из 1
Приведение массива char[] (или char* ) в LPCTSTR
    #39018181
polin11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Задача: пользователь вводит директорию, нужно проверить существует ли эта директория.
Функция DirExists проверки работает правильно, но арuумент у этой функции имеет тип LPCTSTR, клиент вводит строку (char[] или char*)
преобразование в LPCTSTR происходит неверно. Просьба помочь преобразовать в LPCTSTR.


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
#include "stdafx.h"
#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h> 
#include <iostream>
#include<iostream>
#include<fstream>
#include <string>
using namespace std;
bool DirExists(LPCTSTR dir)
{
  DWORD code = GetFileAttributes(dir);
  return code != 0xFFFFFFFF && (FILE_ATTRIBUTE_DIRECTORY & code) != 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
	cout<<"vvedite put" <<endl;
	char str[80];
        cin>>str;               //клиент вводит директорию "C:\\";
	LPCTSTR t=L"C:\\";
	LPCTSTR s=(LPCTSTR) str;
	
	if(DirExists(t))
	  cout<<"OK" <<endl;  //выводит NO
	else
      cout<<"No" <<endl;
    if(DirExists(s))
	  cout<<"OK" <<endl;  //выводит OK
	else
      cout<<"No" <<endl;

	int n;
	cin>>n;
	return 0;
}
...
Рейтинг: 0 / 0
Приведение массива char[] (или char* ) в LPCTSTR
    #39018193
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx

Про работу с Unicode читай Джеффри РИХТЕР "Windows для профессионалов. Создание эффективных Win32-пpилoжeний с учетом специфики 64-разрядной версии Windows"
...
Рейтинг: 0 / 0
Приведение массива char[] (или char* ) в LPCTSTR
    #39019172
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla,

тут проблема вовсе не в этом, а в том, что в Windows в консоли используется кодировка не ansi, а oem,т.е. Не cp1251 а cp866, нужно преводить или установить в консоли нужную кодировку через chcp.
...
Рейтинг: 0 / 0
Приведение массива char[] (или char* ) в LPCTSTR
    #39019185
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
...
	char str[80];
        cin>>str;               //клиент вводит директорию "C:\\";
	LPCTSTR t=L"C:\\";
	LPCTSTR s=(LPCTSTR) str;
...

MasterZiv,
LPCTSTR у него указатель на юникоидную строку. А вместо юникоидной ТС "подсовывает" анси строку.
Думаешь дело только в кодировке консоли?
...
Рейтинг: 0 / 0
Приведение массива char[] (или char* ) в LPCTSTR
    #39019209
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m_Sla
Код: plaintext
1.
2.
3.
4.
5.
6.
...
	char str[80];
        cin>>str;               //клиент вводит директорию "C:\\";
	LPCTSTR t=L"C:\\";
	LPCTSTR s=(LPCTSTR) str;
...

MasterZiv,
LPCTSTR у него указатель на юникоидную строку. А вместо юникоидной ТС "подсовывает" анси строку.
Думаешь дело только в кодировке консоли?

Все правильно, я просто это вчера уже не успел написать, заснул.
Тут надо макрос T () использовать.
Ну и вся программа должна быть немного поправлена.
...
Рейтинг: 0 / 0
Приведение массива char[] (или char* ) в LPCTSTR
    #39019221
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот как надо:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
#include "stdafx.h"
#include <tchar.h>
#include <windows.h>
#include <stdio.h>
#include <stdlib.h> 
#include <iostream>
#include <fstream>

using namespace std;

bool DirExists(LPCTSTR dir)
{
  DWORD code = GetFileAttributes(dir);
  return code != 0xFFFFFFFF && (FILE_ATTRIBUTE_DIRECTORY & code) != 0;
}

int _tmain(int argc, _TCHAR* argv[])
{
	cout<<"vvedite put" <<endl;
	TCHAR str[80];
        cin>>str;               //клиент вводит директорию "C:\\";
	LPCTSTR t=_T("C:\\");
	
	if(DirExists(t))
	  cout<<"OK" <<endl;  //выводит NO
	else
      cout<<"No" <<endl;
    if(DirExists(str))
	  cout<<"OK" <<endl;  //выводит OK
	else
      cout<<"No" <<endl;

	cin.get();
	return 0;
}
...
Рейтинг: 0 / 0
Приведение массива char[] (или char* ) в LPCTSTR
    #39019235
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но на самом деле надо ещё cin cout переопределить на базированный на TCHAR.
И кодировку поставить.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Приведение массива char[] (или char* ) в LPCTSTR
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]