2011-08-29 9 views
0

私は、文字列を使ってバイナリファイルを開くという印象を受けていましたが、単に文字列を作成して文字列を読み込むファイルの名前として実装するだけでした。これが私の講義ノートです。しかし、私は恥ずかしそうに何かを逃している。私は&名前、名前、&名前[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); 
} 
+0

**最小**のコード例をご覧ください。 –

+0

'scanf("%s "、name);は正しいものです。 'printf("読み込みファイル名は%s \ n "、name);です。 – fvu

答えて

5

おそらく

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

あるいは単にを言いたい:超えて割り当てられたメモリであるname + SIZE

scanf("%s", name); 

あなた&name[SIZE]ポイント、。

+0

現在、問題は何ですか? 'fopen'を呼び出す直前に文字列を出力して、それが正しいことを確認できますか? –

+0

愚かなユーザーエラーを修正しました。ありがとうございました! – Connie