换句话说,一个错误的printf / fprintf十进制整数(%d,%u,%ld,%lld)格式字符串能否导致程序崩溃或导致未定义行为?
考虑以下代码行:
无论如何,程序都会打印出预期的结果。我知道,如果
考虑以下代码行:
#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
范围,程序会打印错误的数字 - 这很丑陋,但不影响程序的主要目的 - 除此之外,还可能发生意外情况吗?