2016-02-05 67 views
0

每次我按以下方式運行下面的程序時:./a.out -a -b它正常運行。但如果選擇運行./a.out -a,則會導致分段錯誤(核心轉儲)。有什麼辦法可以解決這個問題嗎?分段錯誤(核心轉儲) - C參數

int main(int argc, char *argv[]) 
{ 
    if (argc > 1) 
    { 
     if (strcmp(argv[1],"-a") == 0) 
     {... 
     if (strcmp(argv[2],"-b") == 0) 
     {...} 
     } 
    } 
} 

回答

3

當你與./a.out -a運行它,只有一個參數,那麼你不應該做檢查strcmp(argv[2],"-b"),因爲沒有第三個參數,和閱讀argv[2]會導致不確定的行爲。


您可以在做strcmp(argv[2],"-b")之前添加額外的檢查來修復它。

int main(int argc, char *argv[]) 
{ 
    if (argc > 1) 
    { 
     if (strcmp(argv[1],"-a") == 0) 
     {... 
     if (argc > 2 && strcmp(argv[2],"-b") == 0) 
     {...} 
     } 
    } 
} 

這看起來很醜,但它會工作。


+0

它的工作原理,謝謝! – user287474

+0

@ user287474,不客氣。 :) – Haris

1

argc統計所有參數,包括程序的名稱。 如果您不提供-b參數,那麼argc等於2