有人可以告诉我这里出了什么问题吗?
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define ERROR 0
#define MAX_INPUT_LINE 80
#define print(x) {fputs(x,stdout);}
#define SUCCESS 1
int main (long argc, char *argv[])
{
int mode;
printf("1 for hexidecimal or 2 for binary");
scanf("%d", mode);
printf("\n\n\nThe value of mode is %d\n", mode);
return 0;
}
当我输入 2 作为二进制文件时,我得到以下信息:
The value of mode is 2665564
显然我应该得到2,我在做什么错?是我的编译器,是因为我正在使用Cygwin吗?为什么模式不是2?
最佳答案
这是C,而不是Java。当您使用诸如scanf (...)
之类的函数时,由于您无法通过引用传递变量,因此您应该传递一个指向将保存该值的变量的指针。
请改用以下内容:
scanf ("%d", &mode);
(&)的使用将通过address-of模式,而不是隐式地将模式强制转换为
(int *)
。在此示例中,您实际上很幸运,这没有导致程序崩溃。如果mode的值为0,并且为了满足该功能而强制转换为指针,则可以取消引用NULL指针。
关于c - 为什么scanf无法正确读取该值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18822602/