将无符号字符附加到向量会更改其值
Posted
技术标签:
【中文标题】将无符号字符附加到向量会更改其值【英文标题】:Appending an unsigned char to a vector changes its value 【发布时间】:2020-12-10 02:38:09 【问题描述】:我有以下二维向量:
vector<vector<unsigned char>> dates;
我还有以下无符号字符数组:
unsigned char date[3] = 1, 18, 108;
当我将 push_back
这个数组设置为 dates
时,它会将所有 unsigned char 元素设置为 204:
date = ADP::addDay(date);
cout << int(date[0]) << '-' << int(date[1]) << '-' << int(date[2]) << endl;
dates.push_back( date[0], date[1], date[2] );
cout << int(date[0]) << '-' << int(date[1]) << '-' << int(date[2]) << endl;
输出:
1-18-108
204-204-204
我在这里缺少什么吗?我认为这是将 char 转换为 ASCII 的问题,但我真的不确定。
编辑
addDay() 看起来像这样:
unsigned char* addDay(unsigned char datep[3])
unsigned char date[3];
date[0] = datep[0];
date[1] = datep[1];
date[2] = datep[2];
... modifys date ...
return date;
所以它返回一个指针。这可能是一个问题吗?
【问题讨论】:
您能否在edit 您的问题中包含minimal reproducible example - 我们可以编译和运行以重现问题的代码? 在online compiler 上试一试,你确定你的输出没有什么意外吗? 我不知道是什么导致了这个问题。当我在另一个文件上运行时,我没有遇到问题。我真的不知道什么是足够的代码来发布。我希望有人能看到我的程序的结构并看到一个可能的问题。 【参考方案1】:addDay
正在返回一个指向超出范围的堆栈变量的指针;调用者有权访问指针时指针无效。
如果您希望它起作用,请将 C 样式数组替换为 std::array
或 std::vector
(或 std::tuple
,因为该位置的意义可能与存储的值无关)。
最小的变化是这样的:
std::tuple<unsigned char, unsigned char, unsigned char> addDay(unsigned char datep[3])
// Same code as before
return date[0], date[1], date[2]; // C++17; on earlier versions, use std::make_tuple
您可以将返回值用于:
auto datetup = ADP::addDay(date);
cout << int(std::get<0>(date)) << '-' << int(std::get<1>(date)) << '-' << int(std::get<2>(date)) << endl;
或者使用漂亮的名称和结构化的绑定:
auto [year, month, day] = ADP::addDay(date);
cout << int(year) << '-' << int(month) << '-' << int(day) << endl;
【讨论】:
以上是关于将无符号字符附加到向量会更改其值的主要内容,如果未能解决你的问题,请参考以下文章