2013-09-21 92 views
0

計劃接收信號SIGSEGV分段錯誤,分割故障方案接收信號SIGSEGV,

上LINE:如果(的argv [1] [0] == ' - ')。

我試圖讓它做東西的時候看到「-c」標誌在UNIX外殼

int main(int argc, char **argv) 
    { 

    int target_column=1; 
    int column_flag=0; 
    int descending_flag=0; 

    /* command-line argument control */ 
     printf("Argument(s) detected(%d)\n", argc); 

     /* default mode */ 
     if (argc = 3) 
     { 
    if (argv[1][0] == '-') 
      { 
       /* column flag */ 
       if (argv[1][1] == 'c') 
       { 
        column_flag=1; 
        printf("column flag found, "); 
       } 
       /* error checking */ 
       else 
       { 
        fprintf(stderr, "tsort -c <column> [-d]\n"); 
        exit(EXIT_FAILURE); 
       } 
      } 

感謝你的答案。這絕對是小錯字。

+4

'if(argc = 3)'? –

回答

4

如果您要檢查的參數個數使用==

if (argc = 3) // This assigns 3 to argc and always yields true 
{ 
    if (argv[1][0] == '-') 

應該

if (argc == 3) 
{ 
    if (argv[1][0] == '-') 

編譯器應該提醒你注意這一點。如果不是,請始終使用-Wall -Wextra進行編譯以避免這種情況。

1

您的argc的值更改爲3在這條線:

if (argc = 3) 

它應該是:

if (argc == 3) 

此作品(編譯器不會給出錯誤信息),因爲分配有在C++中的返回值。在這種情況下,該值爲3,其值爲真。因此,您將始終嘗試訪問尋找「 - 」的第一個參數,該參數可能不存在。這導致段錯誤。

+0

非常感謝您的回答。這絕對是小錯字。 – nike0505

3

你在你的代碼一個錯字:

if (argc = 3) 

而應是:

if (argc == 3) 

人們常把不斷左側以避免這種類型的錯誤,例如:

if(3 = argc) 

不會編譯,因爲一個常數,不能分配給。