C ++将带有\ 0的字符串拆分为列表

时间:2016-08-04 07:52:49

标签: c++ list split delimiter

我想列出逻辑驱动器:

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'
The buffer after GetLogicalDriveStringA()
现在我希望列表中包含"C:\""D:\"等等。所以我尝试过这样的事情:

std::string tmp(buffer,BUFSIZE);//to split this string then
QStringList drivesList = QString::fromStdString(tmp).split("\0");

但它没有奏效。是否可以使用分隔符\0进行拆分?或者有没有办法按长度分割?

1 个答案:

答案 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;
}