受类型转换影响的变量

时间:2017-05-23 21:59:09

标签: c uint32

我一直认为当变量是类型转换时,会产生一个副本,并且任何更改都会影响该临时变量。但是,下面的屏幕截图表明不是。显然,原始变量是变化的。为什么?我很好奇,因为我从未见过类似的东西。

screenshot

1 个答案:

答案 0 :(得分:4)

sprintf nul-终止它输出到提供的缓冲区的字符串。由于%010lu格式说明符请求填充的数字至少为10位数,因此您始终溢出crc_buf并触发UB。在您的特定情况下,crc的最低有效字节会被践踏。

crc_buf个字符设置为11个或更多字符,并使用snprintf代替sprintf来捕获此类错误。为了获得最大的可移植性,您还可以使用PRIu32格式宏而不是强制转换:

snprintf(crc_buf, sizeof crc_buf, "%10" PRIu32, crc);