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

我正在尝试制作一个简单的 for 循环来检查标志以在 UNIX 类型的终端中重新创建 wc 命令。有人知道for循环是怎么回事吗?我得到一个分段错误。还有更多代码,但我只是发布其中的一部分。

提前致谢。

4

3 回答 3

4

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

你应该确保argc >= 5,否则strcmp会收到一个NULL指针i == argc

于 2012-09-17T23:03:33.500 回答
1

您正在查看您argv[i]何时i一路上升到四个,但您只检查argc >= 2. 我想当你有三个或四个参数时你会得到一个段错误,只有当你有五个或更多参数时它才会起作用。

于 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 回答