【发布时间】:2016-12-10 05:35:19
【问题描述】:
我想列出逻辑驱动器:
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结束了字符串,我猜你不能用它作为分隔符 -
从
GetLogicalDriveStrings返回的“列表”是双空字符终止的(不方便地从您的内存视图快照中省略)。因此,您可以通过使用循环strlen和指针算法为每个段获得的长度枚举字符串,直到遇到零长度段。当这种情况发生时,你就完成了。 -
是的,这是我第一次使用
while(i<drives){ i += strlen( &buffer[i] ) + 1; }的方法,它有效,但我希望找到一个更好的解决方案,我可以遍历一个列表。