2014-03-05 58 views
1
int main (int argc, char *argv[]) 
{ 
    int a, b, quo, rest; 

    void division(int dividendo, int divisor, int *ptr_quociente, int *ptr_resto) 
    { 
     *ptr_quociente=dividendo/divisor; 
     *ptr_resto=dividendo%divisor; 
    } 

    if(argc=3) 
    { 
     a= atoi(argv[1]); 
     b= atoi(argv[2]);  

     division(a,b,&quo,&rest); 

     printf(" %d and %d \n",quo,rest); 
    } 
    else if (argc=1) 
     do 
     { 
      printf("type two int numbers:\n"); 

      scanf("%d %d", &a, &b); 

      division(a,b,&quo,&rest); 

      printf(" %d and %d \n",quo,rest); 

     } while(a!=0); 
} 

如果我這樣做:爲什麼這種分段錯誤(核心轉儲)??? INT主(INT ARGC,CHAR *的argv [])

./program.c 12 6

它的工作原理,但如果我這樣做:

./program.c

我得到一個分段錯誤,爲什麼呢?

+0

'argc = 3'應該是'argc == 3' –

+0

謝謝!我應該看到它,有點累...... – Bryant2

回答

2
if(argc=3) should be if(3 == arc) //notice '==' 

這就是爲什麼它始終是好主意,讓constantLHS,這將避免意外分配

同樣的,arc=1

而且,我搬到本地函數定義之外爲主。

​​

編輯:閱讀從Paxdiablo和沙菲克的意見後,我才知道最現代的編譯器會發出警告的狀況'='。您可以簡單地寫if(argc == 3)而不是在LHS上設置常量。

+0

Bah,這就是我喜歡稱之爲「對接 - 醜陋格式」,尤其是因爲現代編譯器可以在條件內提出關於任務的警告。但是,無論如何,因爲你發現問題,即使我笑你的解決方案嘲笑:-) – paxdiablo

+0

確認否,[Yoda條件我們不需要使用 現代編譯器](http://stackoverflow.com/questions/22106713 /是什麼 - 是最差之間,如果無效指針-VS-如果指針爲空)。 –

+0

@paxdiablo沙菲克,是一種同意,因爲它是防禦性編程比其他任何事情。如果(arc == 3)應該沒問題。 –

相關問題