【发布时间】:2018-07-12 13:30:12
【问题描述】:
为什么打印x总是等于0?
#include <stdio.h>
int main()
{
unsigned char num, x, nnum, y = 0;
printf("please enter the number of bits u want to clear \n");
scanf("%d%d", &x, &y);
printf("%d%d", x, y);
return 0;
}
我尝试将它们分开放置,但在从 y 获取变量后,x 变为零。
我知道它们最终会存储在堆栈中,每个 char 是 1 个字节,所以在打印它们时
它们都应该具有我输入的价值。
【问题讨论】:
-
您在对
scanf()的调用中使用了错误的格式。您会以覆盖的形式获得未定义的行为。 -
为什么不将
x和y设为int类型?然后%d将按您的预期工作,而您不必与%hhu混为一谈。 -
为什么会有一个未定义的行为我试图让它尽可能少占用空间@JonathanLeffler
-
您告诉
scanf()您正在提供指向 4 字节(可能)整数的指针;您为它提供指向 1 字节字符的指针。它会相信你的话。在某些系统上,代码可能会崩溃;在其他情况下,它会很慢,并且会覆盖不打算写入的数据。行为是未定义的,所以这两个都是有效的反应, -
1.对于像
x和y这样的单个变量,使用小于int的变量将不会节省内存。所以你会遇到很多麻烦而没有真正的效果。 2. 如果x和y实际上是unsigned char或uint8_t,您可以使用"%hhu` 或"%"SCNu8扫描它们,正如我们一直告诉您的那样。(我知道您尝试过并且它不起作用。再试一次。)