我正在尝试修改MercuryAPI SDK中的RFID阅读器代码。该程序假设通过从使用中获取一些参数并根据用户的输入打印一些消息来工作。但是,程序不允许我在main函数中声明新变量。
char c[1];
int main(int argc, char *argv[])
{
//Code that already written from MercuryAPI SDK
printf("\nEnter input: ");
scanf("%c",c[0]);
printf("\n%c", c[0]);
if(*c == 'O'){
printf("\nThe system is open");
}
else if(*c == 'X'){
printf("\nThe system is unopen");
}
}
所以,我试图将变量声明为全局外部主函数。
{{1}}
声明成功,但程序在输入参数后终止写入。对此有什么解决方案吗?
答案 0 :(得分:0)
scanf("%c",c[0]);
应为scanf("%c",c);
答案 1 :(得分:0)
%c
的{{1}}格式说明符需要scanf
的地址。您正在传递char
,c[0]
的值。由于char
是全局的,因此它的所有元素都使用值0进行初始化。这意味着您将NULL指针传递给c
,然后尝试取消引用。这会调用undefined behavior。
更改scanf
来电,以传递scanf
的地址。另外,将char
更改为单个c
而不是单个元素数组:
char
只要定义出现在任何其他语句之前,您也无法在char c;
...
scanf("%c",&c);
printf("\n%c", c);
if(c == 'O'){
printf("\nThe system is open");
}
else if(c == 'X'){
printf("\nThe system is unopen");
}
函数内定义c
。
答案 2 :(得分:-1)
替换
scanf("%c",c[0]);
与
scanf("%c",c);
同样在您的代码中,有时您使用c[0]
,有时使用*c
:
printf("\n%c", c[0]);
if(*c == 'O'){
printf("\nThe system is open");
}
else if(*c == 'X'){
printf("\nThe system is unopen");
}
我建议对此保持一致,例如,替换:
printf("\n%c", c[0]);
带
printf("\n%c", *c);