Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Приведение массива char[] (или char* ) в LPCTSTR / 7 сообщений из 7, страница 1 из 1
29.07.2015, 01:40
    #39018181
polin11
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приведение массива char[] (или char* ) в LPCTSTR
Задача: пользователь вводит директорию, нужно проверить существует ли эта директория.
Функция 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
29.07.2015, 05:44
    #39018193
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приведение массива char[] (или char* ) в LPCTSTR
https://msdn.microsoft.com/en-us/library/windows/desktop/dd319072(v=vs.85).aspx

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

тут проблема вовсе не в этом, а в том, что в Windows в консоли используется кодировка не ansi, а oem,т.е. Не cp1251 а cp866, нужно преводить или установить в консоли нужную кодировку через chcp.
...
Рейтинг: 0 / 0
30.07.2015, 06:26
    #39019185
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приведение массива char[] (или char* ) в LPCTSTR
Код: 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
30.07.2015, 08:03
    #39019209
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приведение массива char[] (или char* ) в LPCTSTR
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
30.07.2015, 08:37
    #39019221
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приведение массива char[] (или char* ) в 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.
#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
30.07.2015, 09:09
    #39019235
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Приведение массива char[] (или char* ) в LPCTSTR
но на самом деле надо ещё cin cout переопределить на базированный на TCHAR.
И кодировку поставить.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / Приведение массива char[] (или char* ) в LPCTSTR / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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