2015-10-26 154 views
2

我有一個逐行讀取的循環。在循環中,我有一個if塊來檢查行是否不是空字節。當一行有多個空字節時,if語句仍然返回true。檢查行是否爲空字節

我需要一種方法來檢查一行是否充滿空字節。

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

爲什麼不使用內容[I]調整到設定的字符後?你甚至可以使用普通的舊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 
}