int转char存入std::vector<char>遇错误,求简便实现方案
解决int转char并存入vector的问题
嗨,我来帮你搞定这个问题~先看看你代码里的几个明显错误,然后给你几个简便的解决办法:
你的代码里的问题
sprintf参数顺序完全搞反了:sprintf的正确用法是sprintf(目标缓冲区, 格式字符串, 要格式化的变量),你写成了sprintf(i,"%d",c),这不仅参数类型不匹配,还会导致内存越界风险。push_back用法错误:data.push_back(c)里的c是char*类型,而vector::push_back需要的是单个char元素,这就是你看到"invalid conversion from char* to std::vector..."错误的直接原因。
几种简便的解决方法
方法一:C++11+ 简洁方案(推荐)
用std::to_string直接把int转成string,再把string的字符批量插入vector,代码超简洁:
#include <vector> #include <string> int main() { int i = 10; std::vector<char> data; // 把int转成string std::string num_str = std::to_string(i); // 批量插入vector data.insert(data.end(), num_str.begin(), num_str.end()); // 此时data中的元素是 {'1', '0'} return 0; }
方法二:兼容性更好的std::stringstream方案
如果你的编译器不支持C++11,用标准库的stringstream来做格式化,兼容性拉满:
#include <vector> #include <string> #include <sstream> int main() { int i = 10; std::vector<char> data; std::stringstream ss; ss << i; // 把int写入流 std::string num_str = ss.str(); // 转成string // 批量插入vector data.insert(data.end(), num_str.begin(), num_str.end()); return 0; }
方法三:修正C风格sprintf的写法
如果你坚持想用C风格的格式化函数,记得把参数写对,再逐个把字符加入vector:
#include <vector> #include <cstdio> #include <cstring> int main() { int i = 10; char c[80]; std::vector<char> data; // 正确的sprintf参数顺序:缓冲区、格式、变量 sprintf(c, "%d", i); // 遍历字符串,逐个加入vector size_t str_len = strlen(c); for (size_t idx = 0; idx < str_len; ++idx) { data.push_back(c[idx]); } return 0; }
以上三种方法都能满足你的需求:把整数10以'1'和'0'的形式存入vector<char>里,其中方法一最简洁,优先推荐~
内容的提问来源于stack exchange,提问作者Dave
相关产品推荐
相关产品推荐

