C++字符串空字节填充函数未生效,如何实现预期的空填充?
问题原因与解决方案
你的代码无效的核心原因是:s.append("\0")调用的是string::append(const char*)重载,这个方法会把传入的参数当作C风格字符串处理,而C风格字符串以第一个'\0'作为结束标志,所以"\0"会被识别为空字符串,自然不会添加任何字符。
正确实现方式
这里提供三种简洁有效的实现:
方法1:使用append的字符+数量重载(推荐)
直接指定要添加的字符和数量,一步完成填充:
string padToFill(string s, int fill){ const int len = s.length(); if (len < fill){ s.append(fill - len, '\0'); } return s; }
方法2:使用resize方法
resize可以直接将字符串长度调整到目标值,不足部分用指定字符填充:
string padToFill(string s, int fill){ if (s.length() < fill){ s.resize(fill, '\0'); } return s; }
方法3:循环使用push_back
如果偏好循环实现,用push_back直接添加单个空字符:
string padToFill(string s, int fill){ const int len = s.length(); if (len < fill){ for (int i = 0; i < fill - len; ++i){ s.push_back('\0'); } } return s; }
以上三种方式都能正确在字符串末尾填充指定数量的空字节,满足协议要求。
内容的提问来源于stack exchange,提问作者ring0
相关产品推荐
相关产品推荐

