我正在为基础课程编写一个非常简单的C程序,并且在第14行上获得了EXC_BAD_ACCESS
。我看不出问题出在哪里。
该程序要求用户输入数字,然后显示与之关联的ASCII字符。
仅当使用lldb
调试程序时,这种情况才会发生,AFAIK。从命令行或在onlinegdb.com上运行时,它工作得很好。
另外,如果我注释掉第13行,并将true
或false
分配给loop_ctrl
,而不是返回值UserWantsToExit
,一切都会按预期进行。
#include <stdio.h>
#include <stdbool.h>
void GetAndDisplayInput(void);
bool UserWantsToExit(void);
int main()
{
bool loop_ctrl = true;
while (loop_ctrl)
{
GetAndDisplayInput();
loop_ctrl = !UserWantsToExit(); /* EXC_BAD_ACCESS */
}
return 0;
}
void GetAndDisplayInput()
{
char input_char = '0';
printf("\nInput a number: ");
scanf("%i", &input_char);
getc(stdin); /* Gets rid of '\n' */
printf("\n\nIt's character '%c'!\n\n", input_char);
}
bool UserWantsToExit()
{
char choice = '0';
bool value = false;
printf("\nDo you want to exit? (Y/N): ");
scanf("%c", &choice);
getc(stdin); /* Gets rid of '\n' */
value = (choice == 'y' || choice == 'Y');
return value;
}
答案 0 :(得分:3)
在函数%i
中对scanf()
的调用中使用的格式描述符GetAdnDisplayInput()
需要一个指向int
的类型指针的对应参数。您正在传递指向char
的指针。未定义的行为是未定义的。
请注意,您的C编译器应该警告您有关格式描述符和相应参数之间的不匹配;您应该养成在打开所有可能的警告的情况下进行编译的习惯。