gpt4 book ai didi

c - scanf 无法扫描到 uint8_t

转载 作者:行者123 更新时间:2023-12-02 06:01:07 24 4
gpt4 key购买 nike

当我尝试使用 scanfuint8_t ,我得到了疯狂的结果。
使用 int ,我得到了预期的输出“08 - 15”。
使用 uint8_t ,我得到“00 - 15”。

const char *foo = "0815";
uint8_t d1, d2; // output: 00 - 15 (!!!)
// int d1, d2; // output: 08 - 15
sscanf(foo, "%2d %2d", &d1, &d2);
printf("%02d - %02d\n", d1, d2);

我正在使用 GCC。

最佳答案

%d错了,因为这意味着你正在通过 int *但你实际上想通过 uint8_t * .您将需要使用适当的宏:

#include <inttypes.h>
...
sscanf(foo, "%2" SCNu8 " %2" SCNu8, &d1, &d2);

大多数编译器应该给你关于你的代码版本的警告。这是 Clang 的输出:

test2.c:8:24: 警告: 格式指定类型 'int *' 但参数有类型
'uint8_t *'(又名'unsigned char *')[-Wformat]
sscanf(foo, "%2d %2d", &d1, &d2);
~~~ ^~~
%2s
test2.c:8:29: 警告: 格式指定类型 'int *' 但参数有类型
'uint8_t *'(又名'unsigned char *')[-Wformat]
sscanf(foo, "%2d %2d", &d1, &d2);
~~~ ^~~
%2s
生成了 2 个警告。

对于 uint8_t ,这不适用于 printf() , 自 uint8_t将永远提升为 int在传递给 printf() 之前.

关于c - scanf 无法扫描到 uint8_t,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23748257/

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