Функция sscanf изменяет содержимое другой строки

У меня проблемы с чтением строкsscanf, Я набросал код, чтобы сосредоточиться на проблеме. Ниже приведена функция во всем коде, которая должна открывать файл и что-то читать. Ноsscanf действует странно. Например, я объявляю строку с именемatm с содержанием'ATOM', Передsscanf печатает эту строку какATOM в то время как после того, как это ноль. В чем может быть проблема? Я предполагаю, что это должно быть проблемой распределения, но я не мог найти это. Я попробовал некоторые предложения на другие темы, такие как замена%s с другими вещами, но это не помогло.

 void Get (struct protein p, int mode, int type) 
 {
   FILE *fd; //input file
   char name[100]="1CMA"; //array for input file name
   char string[600]; //the array where each line of the data file is stored when reading
   char atm[100]="ATOM";
   char begin[4];
   int index1 =0;

   fd = fopen(name, "r"); // open the input file

   if(fd==NULL) {
     printf("Error: can't open file.\n");
     return 1;
   }    

   if( type==0 ) { //pdb file type
     if( mode==0 ) { 
       while( fgets(string, 600, fd)!=NULL ) {
         printf("1 %s\n",atm);
         sscanf (string, "%4s", begin );
         printf("2 %s \n",atm);
       }
     }   
   }
   fclose(fd);
   free(fd);
   free(name);
 }

Ответы на вопрос(1)

Ваш ответ на вопрос