C++ 将无符号字符追加到向量会更改其值

C++ 将无符号字符追加到向量会更改其值,c++,vector,unsigned-char,C++,Vector,Unsigned Char,我有以下2D向量: vector<vector<unsigned char>> dates; 当我将此数组推回日期时,它将所有无符号字符元素设置为204: date = ADP::addDay(date); cout << int(date[0]) << '-' << int(date[1]) << '-' << int(date[2]) << endl; dates.push_back({ dat

我有以下2D向量:

vector<vector<unsigned char>> dates;
当我
将此数组推回
日期时,它将所有无符号字符元素设置为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;
这里有我遗漏的东西吗?我假设这是字符转换为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;
}

因此它返回一个指针。这可能是一个问题吗?

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
}
std::tuple addDay(unsigned char datep[3]){
//和以前一样的代码
返回{date[0],date[1],date[2]};//C++17;在早期版本中,使用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 datetup=ADP::addDay(日期);

你能不能把你的问题包括在一个我们可以编译和运行的代码中,以重现问题?在一个平台上尝试一下,没有什么意外的。你确定你的输出吗?我不知道是什么导致了问题。当我在另一个文件上运行时,我没有发现问题。我真的不知道什么是足够发布的代码。我希望有人能看到我的程序结构,并看到一个可能的问题。
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;