我想列出逻辑驱动器:
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 :(得分:5)
String::fromStdString(tmp)
的问题在于它只会从缓冲区中第一个以零终止的“条目”创建一个字符串,因为这就是标准字符串的工作原理。这肯定是可能的,但你必须自己手动完成。
你可以通过找到第一个零,提取子串,然后在一个循环中直到你找到两个连续的零,做同样的事情来做到这一点。
Pseudoish代码:
current_position = buffer;
while (*current_position != '\0')
{
end_position = current_position + strlen(current_position);
// The text between current_position and end_position is the sub-string
// Extract it and add to list
current_position = end_position + 1;
}