gpt4 book ai didi

c - printf 重新定义 UINT32_MAX

转载 作者:太空狗 更新时间:2023-10-29 15:11:14 25 4
gpt4 key购买 nike

代码:

#include <stdio.h>
#include <stdint.h>

int main(int argc, char *argv[]) {
printf("%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n%lu\n",
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX);
return 0;
}

输出:

4294967295
4294967295
4294967295
4294967295
4294967295
18446744073709551615
18446744073709551615

错误还是故意的?为什么?我认为它不言而喻,但界面需要我添加更多行才能发布它(代码多代码少文本大声笑)

最佳答案

您正在使用 %lu,这是不正确的。 %lu 说明符用于 unsigned long 并且 unsigned long,而不是 uint32_t .这就是输出不正确的原因。请改用 PRIu32

如果您在启用警告的情况下进行编译,您的编译器应该已经为您捕获了这个错误。

#include <stdio.h>
#include <stdint.h>
#include <inttypes.h> // defines PRIu32

printf(
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n"
"%" PRIu32 "\n",
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX,
UINT32_MAX);

实际上,PRIu32 在大多数系统上被定义为 "u"

关于c - printf 重新定义 UINT32_MAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35457442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com