gpt4 book ai didi

c - 为什么 scanf ("%hhu", char*) 覆盖其他本地变量?

转载 作者:太空狗 更新时间:2023-10-29 15:20:04 26 4
gpt4 key购买 nike

标题说明了一切。我正在使用 GCC 4.7.1(与 CodeBlocks 捆绑在一起),我遇到了一个奇怪的问题。考虑一下:

int main() {
unsigned char a = 0, b = 0, c = 0;
scanf("%hhu", &a);
printf("a = %hhu, b = %hhu, c = %hhu\n", a, b, c);
scanf("%hhu", &b);
printf("a = %hhu, b = %hhu, c = %hhu\n", a, b, c);
scanf("%hhu", &c);
printf("a = %hhu, b = %hhu, c = %hhu\n", a, b, c);
return 0;
}

对于输入 1、2 和 3,此输出

a = 1, b = 0, c = 0
a = 0, b = 2, c = 0
a = 0, b = 0, c = 3

但是,如果我将 a、b 和 c 声明为全局变量,它会按预期工作。为什么会这样?

提前致谢

其他细节:

我运行的是 Windows 8 64 位。我也尝试了 -std=c99,但问题仍然存在。

进一步研究

测试这段代码

void printArray(unsigned char *a, int n) {
while(n--)
printf("%hhu ", *(a++));
printf("\n");
}

int main() {
unsigned char array[8];
memset(array, 255, 8);
printArray(array, 8);
scanf("%hhu", array);
printArray(array, 8);
return 0;
}

显示 scanf 正在将“%hhu”解释为“%u”。直接无视那个“嗯”。输入 1 的代码输出为:

255 255 255 255 255 255 255 255
1 0 0 0 255 255 255 255

最佳答案

重要的细节是您使用的是 Windows,并且可能是过时的或不合格的 C 环境(编译器和标准库)。 MSVCRT 仅支持 C89(即便如此,也不完全正确);特别是,C89 中没有“hh”修饰符,它可能将“hh”解释为与“h”相同(即 short)。

关于c - 为什么 scanf ("%hhu", char*) 覆盖其他本地变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15825254/

26 4 0
文章推荐: c - "#define PACK_OFFSET ((size_t)((pack_t *)0)->data)"是什么意思
文章推荐: html - 适用于 Windows 窗体的 WYSIWYG Markdown 控件?
文章推荐: c - 将二进制搜索展平为有序的单链表 [C]
文章推荐: html - 如何在固定高度
的中间垂直对齐 ?