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

    // If the user does not have the right amount of arguments exit the program and display message
    if(!(argc >= 2)){
        printf("Usage: %s -l -c -w -L <filenames>");
        exit(-1);
    }

    size_t iscFlag = 0;
    size_t islFlag = 0;
    size_t iswFlag = 0;
    size_t isLFlag = 0;
    FILE *src; 
    puts("Work work");  
    // For loop that checks for all the flags
    int i;
    for(i = 1; i < 5; i++){
        if(strcmp(argv[i], "-c") == 0){
            iscFlag = 1;            
        }else if(strcmp(argv[i], "-l") == 0){
            islFlag = 1;
        }else if(strcmp(argv[i], "-w") == 0){
            iswFlag = 1;
        }else if(strcmp(argv[i], "-L") == 0){
            isLFlag = 1;
        }
    }

UNIXタイプの端末でwcコマンドを再作成するためのフラグをチェックする単純なforループを作成しようとしています。forループがどうなったか知っている人はいますか?セグメンテーション違反が発生します。もっとコードがありますが、私はその一部を投稿しています。

前もって感謝します。

4

3 に答える 3

4

for(i = 1; i < 5; i++){
    if(strcmp(argv[i], "-c") == 0){

argc >= 5または が のときにポインタstrcmpを受け取ることを確認する必要があります。NULLi == argc

于 2012-09-17T23:03:33.500 に答える
1

argv[i]が 4 まで上がったときを見ていますiが、チェックするのは だけですargc >= 2。引数が 3 つまたは 4 つある場合は常にセグメンテーション違反が発生し、5 つ以上ある場合にのみ機能すると思います。

于 2012-09-17T23:04:12.763 に答える
0
for(i = 1; i < 5; i++){
        if(strcmp(argv[i], "-c") == 0){
            iscFlag = 1;
            continue;           
        }else if(strcmp(argv[i], "-l") == 0){
            islFlag = 1;
            continue;
        }else if(strcmp(argv[i], "-w") == 0){
            iswFlag = 1;
            continue;
        }else if(strcmp(argv[i], "-L") == 0){
            isLFlag = 1;
            continue;
        }
        break;
    }

それを修正しました!

于 2012-09-17T23:04:29.490 に答える