Как открыть бинарный файл, используя строку? Используя C - PullRequest
0 голосов
/ 29 августа 2011

У меня сложилось впечатление, что для открытия двоичных файлов с использованием строк вы можете просто создать строку, а затем внедрить ее в качестве имени файла, в котором будет читаться строка. Это то, что говорится в моих конспектах. Однако я явно чего-то не понимаю. Я использовал & name, name & name [SIZE] в пределах fopen, и каждый раз я получал inBinFile == NULL, если я не использую закомментированную строку. Моя строка верна. В чем дело? Помощь очень ценится. Заранее спасибо.

#include <stdio.h>  
#include <stdlib.h> 
#define SIZE 25

int frstmenu(void);  
int sndmenu(void);  

int main()  
{  

    int fmenu, smenu;  
    char name[SIZE];  
    FILE *inBinFile;    
    unsigned char numRead;

  fmenu = frstmenu();
  if ( fmenu !=1 && fmenu !=2 )
  {
        printf("\nIncorrect option\n");
        fmenu = frstmenu();
  }

  if (fmenu == 1)
  {    
       printf("\nEnter the file name: \n");
       scanf("%s", &name[SIZE]);
       /* printf("filename: %s", &name[SIZE]); */

       smenu = sndmenu();

       if (smenu !=1 && smenu !=2 )
       {
           printf("\nIncorrect option\n");
           smenu = sndmenu();
       }
       if (smenu == 1)
       {            

           inBinFile = fopen( name, "rb");
        /* inBinFile = fopen( "stream.grc", "rb"); */

        if (inBinFile == NULL)
        {
          fprintf(stderr, "Error opening %s", &name[SIZE]);
          return(-1);

        fclose(inBinFile);
       }      
  }
  return(0);
}

int frstmenu()
{

  float selection;

  printf("----Menu----\n");
  printf("1 Open a file ( supported format: .grc )\n"); 
  printf("2 Exit the program\n");
  printf("  Please select an option (1 or 2): ");
  scanf("%f", &selection);

  return(selection);

}

int sndmenu()

{

int selection;

 printf("---Menu---\n");
 printf("1 Decode the sequence\n");
 printf("2 Exit the program\n");
 printf("  Please select an option (1 or 2):\n");
 scanf("%i", &selection);

 return(selection);
}

1 Ответ

5 голосов
/ 29 августа 2011

Вы, вероятно, хотите сказать

scanf("%s", &name[0]);

или даже просто:

scanf("%s", name);

Ваш &name[SIZE] указывает на name + SIZE, что составляет за выделенная память.

...