我有一个C++无法理解的问题:
我从方法调用中得到了一个未签名的char *。如果我迭代char *以显示数据,一切都很好,但是当我只打印数据时,不会显示相同的值。
这是我的代码示例:
unsigned char returning[32];
for(int i=0;i<32;i++){
returning[i] = result[i];
std::cout << returning[i];//return the good values
}
std::cout << "\n";
std::cout << returning << "\n";
//the first one are the good values, and then there are wrong
有人可以向我解释这种奇怪的行为吗?
最佳答案
tl; dr:
unsigned char returning[33];
returning[32] = '\0';
固定。
说明:
第一个循环将打印“returning”中的每个值。第二段代码将只返回值,直到达到零为止。然后停止,因为char数组中的零被解释为行尾字符。
或者,如果在任何地方“返回”中都没有零,那么第二段代码将继续写入随机值,直到它确实达到零为止。