2012-10-30 141 views
1

我有这样的代码:_ttoi胜C++断言失败

BOOLEAN Recurse = FALSE; 
DWORD  NumPasses = 1; 


int _tmain(int argc, TCHAR *argv[]) 
{ 

    BOOL  foundFileArg = FALSE; 
    int   i; 

    if(argc < 2) { 

     return Usage(argv[0]); 
    } 


    for(i = 1; i < argc; i++) { 

     if(!_tcsicmp(argv[i], TEXT("/s")) || 
      !_tcsicmp(argv[i], TEXT("-s"))) { 

      Recurse = TRUE; 

    } else if(!_tcsicmp(argv[i], TEXT("/p")) || 
        !_tcsicmp(argv[i], TEXT("-p"))) { 

        // assertion failure 
      NumPasses = argc > i ? _ttoi(argv[i+1]) : 1; 
      if(!NumPasses) return Usage(argv[0]); 
      i++; 


     } else { 

      if(foundFileArg) return Usage(argv[0]); 
      foundFileArg = TRUE; 
     } 
    } 


    return 0; 

} 

我得到断言失败, 请建议,其中的问题可能是,在哪里看。是不是有些问题_ttoi功能,当它失败我使用, 如果我要分配一个缓冲区, 我怎样才能解决这个问题

感谢

+2

你不能这样做 “的argv [I + 1]”。您正在遍历所有命令行提供的参数以及您尝试访问最后一个过去的表达式的表达式。 – imreal

+0

他有三个操作员来处理。但它应该是argc> i + 1而不是argc> i –

回答

0

尼克是正确的;不要忘记数组在C/C++中从零开始。如果有5个元素,则表示argv [4]的argv [0]有效 - 而不是argv [5]。

1

此行

NumPasses = argc > i ? _ttoi(argv[i+1]) : 1; 

应该

NumPasses = argc > 1+i ? _ttoi(argv[i+1]) : 1;