為了實作一個客戶端到一些期望空位元組填充到特定字串的協議,我實作了一個用特定數量的空位元組填充字串的函式:
string padToFill(string s, int fill){
int len = s.length();
if (len < fill){
for (int i = 0; i < fill - len; i ){
s.append("\0");
}
}
return s;
}
然而,在實踐中,我從這個函式得到的結果與我作為引數得到的字串相同。例如padToFill("foo", 5)isfoo和 not foo\0\0。即使是 c 字串也應該像處理任何其他字符一樣處理空位元組。
如何實作所需的空填充?
uj5u.com熱心網友回復:
您正在使用的append多載接受一個以空結尾的 C 字串(即:第一個空位元組標記其結束)。
這里最簡單的方法可能是使用不同的多載append:
s.append(fill - len, '\0');
請注意,這需要 C 20。對于較舊的 C 標準,有
s.resize(fill, '\0');
要不就
s.resize(fill);
想一想,無論如何,這可能是描述您正在做的事情的更清晰的方式。為了清楚起見,我喜歡這里的第二個選項。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/529514.html
標籤:C 细绳协议空终止
上一篇:迭代groovy檔案內容
