【发布时间】:2021-10-15 19:13:55
【问题描述】:
我使用的是 10 64 位。 例如,当运行以下代码时,我得到一个溢出并打印一个负数,而在 linux 64 机器上我得到打印的实际数字:
#include <stdio.h>
int main() {
long int a = 3845354610;
printf("Hello, World!%ld\n", a);
scanf("%ld", &a);
return 0;
}
windows 上的输出是:
Hello, World!-449612686
在 linux 上它是正确的输出。
我尝试在 CLion 的 CMake 选项中使用 --build-64bit 标志。我正在使用mingw-64 (D:\MinGW\mingw-w64\x86_64-8.1.0-posix-seh-rt_v6-rev0\mingw64)。
我尝试使用cmd编译:
gcc -Wall -Wextra -Wvla -std=c99 main.c -o ma.exe
但是输出是一样的。如何解决这个问题?
【问题讨论】:
-
3845354610不适合有符号的 32 位整数。 -
什么是
printf("%zu\n", sizeof(long int)); -
@ArielYael 好吧,就是这样...... 4x8 = 32 位无法存储 3845354610
-
@ArielYael “互联网上说应该是 64”在哪里?
-
32 位 MSVC 使用 32 位指针,64 位 MSVC 使用 64 位指针(与 GCC 相同)。但 MSVC 保留 32 位
int和long。是允许的。
标签: c++ c 64-bit overflow long-integer