gpt4 book ai didi

c++ - GetLogicalDriveStrings() 和 char - 我哪里做错了

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:40 30 4
gpt4 key购买 nike

我想搜索一个可能存在于任何驱动器(例如 C:\、D:\等)中的文件。使用 GetLogicalDriveStrings 我可以获得驱动器列表,但是当我添加任何内容时额外的输出,我在输出提示中得到一个 null 。这是我的代码:

#include "StdAfx.h"
#include <windows.h>
#include <stdio.h>
#include <conio.h>

// Buffer length
DWORD mydrives = 100;
// Buffer for drive string storage
char lpBuffer[100];
const char *extFile = "text.ext";

// You may want to try the wmain() version
int main(void)
{
DWORD test;
int i;
test = GetLogicalDriveStrings(mydrives, (LPWSTR)lpBuffer);
if(test != 0)
{
printf("GetLogicalDriveStrings() return value: %d, Error (if any): %d \n", test, GetLastError());
printf("The logical drives of this machine are:\n");
// Check up to 100 drives...
for(i = 0; i<100; i++)
printf("%c%s", lpBuffer[i],extFile);
printf("\n");
}
else
printf("GetLogicalDriveStrings() is failed lor!!! Error code: %d\n", GetLastError());
_getch();
return 0;
}

我希望以上输出为 C:\text.ext D:\text.ext ... 而我只得到 text.ext。我正在使用 Microsoft Visual C++ 2010 Express

最佳答案

GetLogicalDriveStrings()返回以 null 终止的字符串的双 null 终止列表。例如,假设您的机器中有驱动器 A、B 和 C。返回的字符串如下所示:

A:\<nul>B:\<nul>C:\<nul><nul>

您可以使用以下代码遍历返回缓冲区中的字符串并依次打印每个字符串:

DWORD dwSize = MAX_PATH;
char szLogicalDrives[MAX_PATH] = {0};
DWORD dwResult = GetLogicalDriveStrings(dwSize,szLogicalDrives);

if (dwResult > 0 && dwResult <= MAX_PATH)
{
char* szSingleDrive = szLogicalDrives;
while(*szSingleDrive)
{
printf("Drive: %s\n", szSingleDrive);

// get the next drive
szSingleDrive += strlen(szSingleDrive) + 1;
}
}

请注意,该功能如何工作的详细信息,包括我无耻地复制和粘贴的示例代码,可以通过reading the docs 找到。 .

关于c++ - GetLogicalDriveStrings() 和 char - 我哪里做错了,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18572944/

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