1

我有这个代码:

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函数是否有问题,如果我必须分配一个缓冲区,我该如何解决

谢谢

4

2 回答 2

1

这条线

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

应该

NumPasses = argc > 1+i ? _ttoi( argv[i+1] ) : 1;
于 2012-10-30T03:27:10.860 回答
0

尼克是对的;不要忘记在 C/C++ 中数组从零开始。如果有 5 个元素,则意味着 argv[0] 到 argv[4] 是有效的 - 不是 argv[5]。

于 2012-10-30T03:21:19.427 回答