gpt4 book ai didi

c++ - 数组在 Visual C++ 中奇怪地存储从 GetVolumeInformation 检索到的名称?

转载 作者:行者123 更新时间:2023-11-28 03:56:45 25 4
gpt4 key购买 nike

我想使用 GetVolumeInformation 调用来检索可移动设备的名称。我可以很好地检索名称并将其存储到 TCHAR 数组变量 szVolNameBuff 中。这是我的代码:

 // Get Volume Information to check for NTFS or FAT

TCHAR szFileSys[256];
TCHAR szVolNameBuff[256];
DWORD dwSerial = 0;
DWORD dwMFL = 0;
DWORD dwSysFlags = 0;
bool bSuccess;
char fileType[255];
int bSuccessdebug = 0;
//LPCTSTR temp = _T("E:\\"); For debugging only

bSuccess = GetVolumeInformation(drivePath,
szVolNameBuff,
sizeof(szVolNameBuff),
&dwSerial,
&dwMFL,
&dwSysFlags,
szFileSys,
sizeof(szFileSys));

当我尝试使用以下行打印变量的内容时:

printf("szVolNameBuff holds: %s \n", &szVolNameBuff);

我得到的输出是“T”,而不是驱动器名称“Transcend”。我用 Visual Studio 2008 调试它,发现 TCHAR 数组将名称存储为:[0] 'T'[1] 0[2] 'R'[3] 0[4] 'A'[5] 0[6] 'N'[7] 0

等等等等。这是为什么?我希望数组将单词存储为:

[0] 'T'[1] 'R'[2] 'A'[3] 'N'[4] 'S'

稍后将其用于字符串连接。有办法解决这个问题吗?

最佳答案

看起来您正在使用 unicode Win32 API。您应该使用 _tprintf,以便根据字符类型使用适当的函数(printf 或 wprintf)。

如果您不知道 unicode - 这里有一个快速概述。发生这种情况的原因是常规 ascii 字符的 unicode 是一个空字节,后跟 ascii 字符。这就是为什么您会看到用空值填充的字符串。

请注意,在使用 TCHAR 时,还应将所有字符串包装在 _T() 宏中,以便它们也被声明为正确的类型。如果您始终遵循这一点,从 unicode 转换为 ansi 只是更改预处理器指令的问题。

关于c++ - 数组在 Visual C++ 中奇怪地存储从 GetVolumeInformation 检索到的名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3251079/

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