2015-10-26 4 views
2

У меня есть цикл, который читается по строкам. В цикле у меня есть блок if, который проверяет, не является ли строка не нулевым байтом. Когда строка содержит более одного нулевого байта, оператор if возвращает true.Проверьте, нет ли строки nullbytes

Мне нужен способ проверить, заполнена ли строка нулевыми байтами.

Block block = this->mMemblockDevice->readBlock(parent); 
std::stringstream inputPath(block.toString()); 
std::string segment; 
std::string contentNew = ""; 
while(std::getline(inputPath,segment)){ 
    if(segment != "\0"){ // If a/is last then a null byte 
     contentNew += segment + "\n"; //Check size after every line 
     std::cout << " Line Size: " << contentNew.size() << " Line: " << segment << std::endl; 
    } 
} 

Причина, почему я должен проверить нулевых байтов является то, что я пишу в класс, который требует размер, чтобы быть ровно 512 символов/байт большой, поэтому я content.resize(512, '\0'); Теперь мне нужно, чтобы добавить символы в строке, так что я нужно удалить нулевые байты, чтобы я мог добавлять символы.

БППП :: соиЬ в обходных выходах этого:

Line Size: 3 Line: 0/ 
Line Size: 5 Line: 0 
Line Size: 513 Line: 
+0

почему бы не просто использовать содержание [я] после того, как изменить размер, чтобы установить символы? вы можете даже использовать простой старый memcpy, чтобы выполнить работу – Paladin

ответ

0

Я нашел решение своей проблемы. Я просто просто изменился, поэтому я проверяю только, является ли первый символ в строке нулевым байтом.

Рабочий код выглядит

while(std::getline(inputPath,segment)){ 
    if(segment[0] != '\0'){ // If a/is last then a null byte 
     contentNew += segment + "\n"; //Check size after every line 
     std::cout << " Line Size: " << contentNew.size() << " Line: " << segment << std::endl; 
    } 
} 
0

Вы можете использовать std::find и поиск по всей строке нулевых символов. Если он не найдет, то функция вернется последним.

if(std::find(std::begin(segment), std::end(segment), '\0') == std::end(segment)) 
{ 
    // string does not contain any null characters 
} 
Смежные вопросы