La función sscanf cambia el contenido de otra cadena.

Estoy teniendo problemas para leer cadenas consscanf. He descartado el código para centrarme en el problema. A continuación se muestra una función en todo el código que se supone que abre un archivo y lee algo. Perosscanf está actuando de forma extraña. Por ejemplo declaro una cadena llamadaatm con el contenido'ATOM'. Antes desscanf imprime esta cadena comoATOM mientras que después es nulo. ¿Cual podría ser el problema? Supongo que debe ser un problema de asignación, pero no pude encontrarlo. He intentado algunas sugerencias sobre otros temas como la sustitución%s Con otras cosas pero no ayudó.

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

Respuestas a la pregunta(1)

Su respuesta a la pregunta