gpt4 book ai didi

c++ - LPCTSTR 的非常奇怪的行为

转载 作者:行者123 更新时间:2023-11-30 01:18:15 26 4
gpt4 key购买 nike

我一直致力于使用 FindFirstFile 和 FindNextFile 反向搜索目录的系统,但我遇到了一个我不明白的问题。

下面是一段代码。

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine
,int nCmdShow)
{
searchDrive((LPCTSTR)"C:\\",(LPCTSTR)"*.bdjf");
return 0;
}

bool searchDrive(LPCTSTR lpFolder, LPCTSTR lpFilePattern)
{

TCHAR szFullPattern[MAX_PATH];

WIN32_FIND_DATA FindFileData;

HANDLE hFile = INVALID_HANDLE_VALUE;

PathCombine(szFullPattern, lpFolder, L"x");

MessageBox(NULL,szFullPattern,lpFilePattern,MB_ICONWARNING |
MB_CANCELTRYCONTINUE |
MB_DEFBUTTON2);

HANDLE hFind = FindFirstFile(szFullPattern, &FindFileData);

我正在使用 Visual Studio 2008。

enter image description here

可以看到除了最后一个字符和'\'看不到,其余的都是亚洲字符。

(注意不要担心我的代码的任何其他问题。)

任何关于为什么会发生这种情况的想法都将不胜感激。

最佳答案

这是你的问题:

searchDrive((LPCTSTR)"C:\\",(LPCTSTR)"*.bdjf");

默认情况下,Visual Studio 以 Unicode 模式编译程序。因此,您将两个“ANSI”(8 位字符)字符串都转换为“Unicode”(16 位字符)字符串类型。

这不会转换字符串。它只是告诉编译器假装它们一直都是 Unicode 字符串。这行不通也就不足为奇了。结果是每对 ANSI 字符都被视为单个 Unicode 字符。

您可以这样解决问题:

searchDrive(TEXT("C:\\"), TEXT("*.bdjf"));

但是除非你有特定的理由支持ANSI模式,否则还是用

searchDrive(L"C:\\", L"*.bdjf");

并更改 searchDrive 的声明以使用 LPCWSTR 而不是 LPCTSTR

关于c++ - LPCTSTR 的非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22888996/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com