为什么我的C程序崩溃?
当我从msys命令行运行该程序时,它会通知打开一个名为calc.exe(程序名称)的窗口,并显示以下错误: calc.exe遇到问题并需要关闭。对此造成的不便,我们表示歉意。为什么我的C程序崩溃?
这里是我的主要功能:
int main(int argc, char *argv[])
{
int num1, num2, ans;
hist_file_create();
if (argc < 2 || argc > 2)
kill("ERROR: Use: calc <operation_type>");
char operation_type = argv[2][0];
switch(operation_type)
{
// Addition
case 'a':
printf("Enter a number:\n");
scanf("%d", &num1);
printf("Enter a second number\n");
scanf("%d", &num2);
ans = num1 + num2;
printf("%d + %d = %d", num1, num2, ans);
break;
// Operation type list
case 'l':
operation_type_list();
break;
default:
kill("Invalid operation type. To see a list of recognised operation types, type l");
}
system("PAUSE");
}
我知道这是可能仍然很凌乱,但右nnow我只是想,使其工作,后来清理。 您可能需要的任何其他信息我会给。
这个条件可以确保您有完全相同2个参数或程序中存在 如果(ARGC < 2 || ARGC> 2) 杀( “ERROR:使用:理论值”);
但是下一行正在访问第三个参数 char operation_type = argv [2] [0];
哪些不存在。和程序被杀死
好的。生病尝试现在解决它。 thx – mee
我将if语句更改为:if(argc 3),现在它不会崩溃。为此。但不是执行我告诉它的任何情况,而是执行kill(“ERROR:Use:calc
如果您更改了argc条件,则意味着您需要3个参数或调用kill。显然,如果你在没有3个参数的情况下调用它,它将会退出(记住第一个参数总是可执行文件名)。 我强烈怀疑,你想做出改变是 焦炭operation_type =的argv [1] [0] 所以该方案仍接受2个参数(第一个参数计算,第二个参数
你可以把完整的代码,我的意思是'hist_file_create()'和'operation_type_list()'的定义? –
是的。我可以pastebin它,如果你像 – mee
@mat - ita崩溃时,我运行程序从命令行,与“calc a”或“calc l”。而不是执行这两种情况下的代码,它崩溃 – mee