title: Can't find mistake -- 'segmentation fault' - in C
body: <p>I wrote this function but can't get on the problem that gives me 'segmentation fault' msg.</p>
  
  <p>Thank you for any help guys !!</p>
  
  <pre><code>/*This function extract all header files in a *.c1 file*/
  
  void includes_extractor(FILE *c1_fp, char *c1_file_name ,int c1_file_str_len )
  {
      int i=0;
      FILE *c2_fp , *header_fp;
      char ch, *c2_file_name,header_name[80]; /* we can assume line length 80 chars MAX*/
      char inc_name[]="include"; 
      char inc_chk[INCLUDE_LEN+1]; /*INCLUDE_LEN is defined | +1 for null*/
  
      /* making the c2 file name */
  
      c2_file_name=(char *) malloc ((c1_file_str_len)*sizeof(char));
      if (c2_file_name == NULL)
      {
       printf("Out of memory !\n");
       exit(0);
      } 
  
      strcpy(c2_file_name , c1_file_name); 
      c2_file_name[c1_file_str_len-1] = '\0'; 
      c2_file_name[c1_file_str_len-2] = '2';
  
  /*Open source &amp; destination files + ERR check */
  
      if( !(c1_fp = fopen (c1_file_name,"r") ) )
      {
       fprintf(stderr,"\ncannot open *.c1 file !\n");
       exit(0);
      }
  
      if( !(c2_fp = fopen (c2_file_name,"w+") ) )
      {
       fprintf(stderr,"\ncannot open *.c2 file !\n");
       exit(0);
      }
  
  /*next code lines are copy char by char from c1 to c2,
    but if meet header file, copy its content */
  
      ch=fgetc(c1_fp);
      while (!feof(c1_fp))
      {
          i=0;    /*zero i */ 
          if (ch == '#') /*potential #include case*/
          {
               fgets(inc_chk, INCLUDE_LEN+1, c1_fp); /*8 places for "include" + null*/
           if(strcmp(inc_chk,inc_name)==0) /*case #include*/
           {
            ch=fgetc(c1_fp);
            while(ch==' ') /* stop when head with a '&lt;' or '"' */
            {
             ch=fgetc(c1_fp);
            } /*while(2)*/
  
            ch=fgetc(c1_fp); /*start read header file name*/
  
            while((ch!='"') || (ch!='&gt;')) /*until we get the end of header name*/
            {
             header_name[i] = ch;
             i++;
             ch=fgetc(c1_fp);
            }/*while(3)*/
            header_name[i]='\0';  /*close the header_name array*/
  
  
            if( !(header_fp = fopen (header_name,"r") ) ) /*open *.h for read + ERR chk*/
            {
                 fprintf(stderr,"cannot open header file !\n");
             exit(0);
                }
            while (!feof(header_fp)) /*copy header file content to *.c2 file*/
            {
             ch=fgetc(header_fp);
             fputc(ch,c2_fp);
            }/*while(4)*/
            fclose(header_fp);
           }
                  }/*frst if*/
          else
          {
           fputc(ch,c2_fp);
          }
       ch=fgetc(c1_fp); 
      }/*while(1)*/ 
  
  fclose(c1_fp);
  fclose(c2_fp);
  free (c2_file_name);    
  }
  </code></pre>