rin*_*ng0 1 c++ string protocols null-terminated
为了实现某个协议的客户端需要对特定字符串进行空字节填充,我实现了一个用特定数量的空字节填充字符串的函数:
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;
}
Run Code Online (Sandbox Code Playgroud)
然而,实际上,我从这个函数得到的结果与我作为参数得到的字符串相同。例如padToFill("foo", 5)isfoo和 not foo\0\0。即使 C++ 字符串也应该像处理任何其他字符一样处理空字节。
如何实现所需的空填充?
Win*_*ute 11
您使用的重载append接受一个 C 字符串,该字符串以 null 结尾(即:第一个 null 字节标记其结尾)。
这里最简单的方法可能是使用不同的重载append:
s.append(fill - len, '\0');
Run Code Online (Sandbox Code Playgroud)
请注意,这需要 C++20。对于较旧的 C++ 标准,有
s.resize(fill, '\0');
Run Code Online (Sandbox Code Playgroud)
要不就
s.resize(fill);
Run Code Online (Sandbox Code Playgroud)
想想看,无论如何,这可能是描述您正在做的事情的更清晰的方式。为了清晰起见,我喜欢这里的第二个选项。