为什么我的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我只是想,使其工作,后来清理。 您可能需要的任何其他信息我会给。

+0

你可以把完整的代码,我的意思是'hist_file_create()'和'operation_type_list()'的定义? –

+0

是的。我可以pastebin它,如果你像 – mee

+0

@mat - ita崩溃时,我运行程序从命令行,与“calc a”或“calc l”。而不是执行这两种情况下的代码,它崩溃 – mee

这个条件可以确保您有完全相同2个参数或程序中存在 如果(ARGC < 2 || ARGC> 2) 杀( “ERROR:使用:理论值”);

但是下一行正在访问第三个参数 char operation_type = argv [2] [0];

哪些不存在。和程序被杀死

+0

好的。生病尝试现在解决它。 thx – mee

+0

我将if语句更改为:if(argc 3),现在它不会崩溃。为此。但不是执行我告诉它的任何情况,而是执行kill(“ERROR:Use:calc ”); – mee

+0

如果您更改了argc条件,则意味着您需要3个参数或调用kill。显然,如果你在没有3个参数的情况下调用它,它将会退出(记住第一个参数总是可执行文件名)。 我强烈怀疑,你想做出改变是 焦炭operation_type =的argv [1] [0] 所以该方案仍接受2个参数(第一个参数计算,第二个参数) 你再图从第二个参数的第一个字符中取出操作类型:argv [1] [0] 请务必记住,编译器将完全按照您所做的告诉它只做更多事情。 – odedsh