Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 将wstring转换为TCHAR的问题_C++_Cstring_Wstring_Tchar - Fatal编程技术网

C++ 将wstring转换为TCHAR的问题

C++ 将wstring转换为TCHAR的问题,c++,cstring,wstring,tchar,C++,Cstring,Wstring,Tchar,我对编程相当陌生,我正在尝试编写一个程序,其中用户输入一个日期,然后将该日期添加到文件目录名中,然后搜索该文件目录 下面是我正在处理的问题。我有很多函数可以实现这一点。。我在网上搜索了一下,尝试了几种不同的转换方式,但我就是不明白。。。。所以我停止了(我所知道的是未纠正的)静态施法 也许我只是做得不对。。。基本上,这会将其返回到使用WINAPI处理程序的函数。我是否能让它工作完全是另一回事。。。提前感谢您的帮助 wstring fDate; wstring fileDin; const TCH

我对编程相当陌生,我正在尝试编写一个程序,其中用户输入一个日期,然后将该日期添加到文件目录名中,然后搜索该文件目录

下面是我正在处理的问题。我有很多函数可以实现这一点。。我在网上搜索了一下,尝试了几种不同的转换方式,但我就是不明白。。。。所以我停止了(我所知道的是未纠正的)静态施法

也许我只是做得不对。。。基本上,这会将其返回到使用WINAPI处理程序的函数。我是否能让它工作完全是另一回事。。。提前感谢您的帮助

wstring fDate;
wstring fileDin;

const TCHAR* s = _T (fileDin);

std::wstring(fDate);
std::wstring(fileDin) =L"Z:\\software\\A\\AC\\" + fDate;
wcout<< fileDin;
cout <<endl;

//wstring fileDin(&arc[1]);
fileDin = static_cast<TCHAR>(arc[1]);
dir(2, arc);
wstring-fDate;
wstringfiledin;
常量TCHAR*s=\u T(fileDin);
std::wstring(fDate);
std::wstring(fileDin)=L“Z:\\software\\A\\AC\\\”+fDate;

wcout
TCHAR
可以是
wchar\u t
(使用Unicode时)或
char
(使用多字节时)。
另一方面,
std::wstring
总是包含
wchar\u t
类型的字符,因此最好直接使用
wchar\u t*
而不是
TCHAR*
(如果可能的话)

然后可以使用
std::wstring
的构造函数将
wchar\u t*
转换为
std::wstring

wchar_t* wcstr = L"my string";
std::wstring wstr(wcstr);
std::wstring
wchar\u t*
通过简单调用
c\u str()
方法:

wchar_t* wcstr = wstr.c_str();
然后,有时您可能需要在“宽”字符串(
std::wstring
s holding
wchar\t
characters)和多字节字符串(
std::string
s holding
char
s)之间进行转换。我通常使用以下助手:

// multi byte to wide char:
std::wstring s2ws(const std::string& str)
{
    int size_needed = MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), NULL, 0);
    std::wstring wstrTo(size_needed, 0);
    MultiByteToWideChar(CP_UTF8, 0, &str[0], (int)str.size(), &wstrTo[0], size_needed);
    return wstrTo;
}

// wide char to multi byte:
std::string ws2s(const std::wstring& wstr)
{
    int size_needed = WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), int(wstr.length() + 1), 0, 0, 0, 0); 
    std::string strTo(size_needed, 0);
    WideCharToMultiByte(CP_ACP, 0, wstr.c_str(), int(wstr.length() + 1), &strTo[0], size_needed, 0, 0); 
    return strTo;
}

基于编译时没有错误的
\T(fileDin)
这一事实,必须将配置设置为
TCHAR
char
。不幸的是,这意味着这个答案行不通。@Markransem:说得好。我仍然认为在大多数情况下,显式地使用
wchar\u t*
char*
比使用
TCHAR
更简单,因此更好。同意,
TCHAR
是很久以前的遗物。不幸的是,我们中的许多人仍然使用那些时代的代码库,为了保持一致性,我们需要继续使用它们。不幸的是,这是我在使用FindFirstFile()或FindNextFile()时得到的代码,我花了很长时间才掌握了这个窍门。如果有一种更简单的方法从目录中搜索和提取我不知道的文件名,我可能能够绕过整个函数。我可以尝试使用wchar\u t*重写,如果它能满足我的需要。在您的情况下,最好避免使用
TCHAR