或者换句话说:错误的printf
/fprintf
十进制整数 ( %d
, %u
, %ld
, %lld
) 格式字符串会导致程序崩溃或导致未定义的行为吗?
Cosinder 以下代码行:
#include <iostream>
#include <cstdio>
int main() {
std::cout << sizeof(int) << std::endl
<< sizeof(long) << std::endl;
long a = 10;
long b = 20;
std::printf("%d, %d\n", a, b);
return 0;
}
32 位架构的结果:
4
4
10, 20
64 位架构的结果:
4
8
10, 20
在任何情况下,程序都会打印出预期的结果。我知道,如果long
值超出int
范围,程序会打印错误的数字——这很难看,但不会影响程序的主要目的——但除此之外,还会发生什么意外吗?