我想列出逻辑驱动器的信息,包括:
缓冲区现在包含:
现在我想要一个填充着
const size_t BUFSIZE = 100;
char buffer[ BUFSIZE ];
memset(buffer,0,BUFSIZE);
//get available drives
DWORD drives = GetLogicalDriveStringsA(BUFSIZE,static_cast<LPSTR>(buffer));
缓冲区现在包含:
'C',':','\\','0'
现在我想要一个填充着
"C:\"
,"D:\"
等等的列表。因此我尝试了以下内容:std::string tmp(buffer,BUFSIZE);//to split this string then
QStringList drivesList = QString::fromStdString(tmp).split("\0");
但是它没有起作用。使用分隔符\0
进行分割是否可能?或者是否有一种按长度分割的方法?
\0
结束了字符串,所以我猜你不能将其用作分隔符。 - rocambilleGetLogicalDriveStrings
返回的“list”是双null字符终止的(在您的内存视图快照中不方便地省略)。因此,您可以通过使用循环的strlen
和指针算术获得每个段的长度来枚举字符串,直到遇到零长度段为止。当发生这种情况时,你就完成了。 - WhozCraigwhile(i<drives){ i += strlen( &buffer[i] ) + 1; }
它可以工作,但我希望能找到一个更好的解决方案,可以遍历列表。 - Drayke