2013-09-21 62 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) 

不会编译,因为一个常数,不能分配给。