my_wc.c Ошибка сегментации (ядро сброшено) - PullRequest
0 голосов
/ 29 октября 2019

Создание собственной версии команды "wc" в c. когда я выполняю ./a.out -l sample.txt, он работает совершенно нормально. Но когда я пытаюсь использовать 2 и 3 аргумента вместо 1, таких как ./a.out -l -w sample.txt, это выдает мне ошибку «Ошибка сегментации (ядро сброшено)». Пожалуйста, помогите

#include<stdio.h>

#include<string.h>

int main(int argc,char* argv[])

{

                FILE* fp[20];

                int w=0, c=0, l=0, space=1, i;

                char ch;



                if(argc <= 2) {

                                printf("error, please atleast 3 argument");

                                return 1;

                }

                for (i = 6 ; i < argc; i++) 
                          {

                                if(argc >= 3)
                                    {

                                     fp[i - 2] = fopen(argv[i],"r");

                                     if (fp[i - 2] == NULL) 
                                    {

                                     printf("ERROR in opening filen");

                                      return 1;

                                    }

                                }



                w = 0;

                c = 0;

                l = 0;

                ch = fgetc(fp[i - 2]);

                while(!feof(fp[i - 2])) 
                 {                            
                   if(ch == ' ')
                   {                                            
                   space=1;
                   } 
                   else if(ch == '\n') 
                   {
                   l++;
                   space=1;
                   } 
                   else 
                   {
                   if(space==1)
                   w++;
                   space=0;
                   }

              c++;
              ch = fgetc(fp[i - 2]);

                }



     if(argc >= 3)
       {
       if(!strcmp(argv[1],"-w"))
          printf("%3d", w);
       else if(!strcmp(argv[1],"-l"))
          printf("%3d",l);
       else if(!strcmp(argv[1],"-c"))
          printf("%3d",c);

       else if(!strcmp(argv[2],"-w"))
          printf("%3d", w);
       else if(!strcmp(argv[2],"-l"))
          printf("%3d",l);
       else if(!strcmp(argv[2],"-c"))
          printf("%3d",c);

       else if(!strcmp(argv[3],"-w"))
          printf("%3d", w);
       else if(!strcmp(argv[3],"-l"))
          printf("%3d",l);
       else if(!strcmp(argv[3],"-c"))
          printf("%3d",c);

          printf(" %s\n",argv[i]);

                  }

                }

          if(argc >= 3)
            {      
            for (i = 2 ; i < (argc - 1); i++) 
                {
                fclose(fp[i - 2]);
                }
            }
return 0;
}
...