for循环的C分段故障

时间:2012-09-17 23:01:05

标签: c loops for-loop segmentation-fault fault

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;
        }
    }

我正在尝试创建一个简单的for循环来检查标志,以便在UNIX类型的终端中重新创建wc命令。任何人都知道for循环的内容是什么?我得到了一个分段错误。有更多的代码,但我只是张贴了它的一部分。

提前致谢。

3 个答案:

答案 0 :(得分:4)

使用

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

argc >= 5时,您应该确保strcmpNULL会收到i == argc指针。

答案 1 :(得分:1)

argv[i]一直到4时,您正在查看i,但您只检查argc >= 2。我想你只要有三个或四个参数就会得到一个段错误,它只会在你有五个或更多的时候起作用。

答案 2 :(得分: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;
    }

修正了它!