gpt4 book ai didi

c++ - Sprintf() 错误

转载 作者:行者123 更新时间:2023-11-27 23:32:02 25 4
gpt4 key购买 nike

我的项目中有一个Binary2String()

长期有效。但是当 sprintf(temp, "%02d ", vec[i]); 上的 vec[0] = 255 时它抛出异常。

原代码如下,

void Binary2String(const vector<unsigned char>& vec, string& result)
{

if(vec.size() == 0)
return;

for(size_t i = 0; i < vec.size(); i++)
{
char temp[4] = {0};
sprintf(temp, "%02d ", vec[i]);
result.push_back(temp[0]);
result.push_back(temp[1]);
result.push_back(temp[2]);

}
}

然后我修复了这个错误,我无法理解 vector 和 sprintf() 完成。

有没有道理? (我是 C++ 的新手。谢谢)

        char temp[6] = {0};
sprintf(temp, "%02d ", vec[i]);
result.push_back(temp[0]);
result.push_back(temp[1]);
result.push_back(temp[2]);
result.push_back(temp[3]);
result.push_back(temp[4]);

最佳答案

首先,%02d 不是正确的格式,因为值最多可达 3 位数字(%03d 会更合适)。正如 Chris 在下面的评论中所述,%03hhu 将是技术上正确的说明符(要理解 %03hhu,请查看 this cheat sheet)。

其次,你需要 5 个字节来存储字符“2”、“5”、“5”、“”、0(你在 %02d 的末尾有一个额外的空间)。要么删除空格,要么将缓冲区扩展到至少 5 个字符(正如您所做的那样)。

最后,您可以通过这种方式更可靠地转换为字符串:

template<typename T> std::string ToString(const T& in) {
std::basic_ostringstream<char> o;
if (!(o << in)) {
// error, throw an exception
}
return o.str();
}

关于c++ - Sprintf() 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com