对于下面的代码(C 语言)
int small_a, small_b;
printf("Please input two numbers\n");
scanf_s("%d %d", &small_a, &small_b);
printf("%d %d", &small_a, &small_b);
int test_2nd = small_a - small_b;
if (test_2nd < 0) {
printf("a is smaller %d", &small_a);
}
else {
printf("b is smaller %d", &small_b);
当我写 4 和 2 时它打印的值是一个巨大的六位数字(在本例中为 5504620 和 5504608)我不明白哪里出了问题。 stdio.h
已作为 header 包含在内。
最佳答案
这里的问题出在打印语句中。在代码中
printf("%d %d", &small_a, &small_b);
您不需要(想要)获取(打印)地址。删除那个 &
。
也就是说,这实际上调用了 undefined behavior . %d
和 printf()
需要一个类型为 int
的参数,而您实质上是在提供一个 int *
,导致 UB。
FWIW,要打印地址(指针),您需要使用 %p
格式说明符并将参数转换为 void *
关于c - Scanf_s 读取错误的输入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39675667/