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[5] ではなく、argv[0] から argv[4] が有効であることを意味します。

于 2012-10-30T03:21:19.427 に答える