2012-01-17 7 views
0

ディレクトリ内でバイナリファイルを開き、それに応じて操作を実行しようとしていました。この行は、以下のロジックが正しく動作する表現ではありません。VC++ 2008でプログラムを実行中に未処理の例外が発生しました

int main(int argc, char* argv[]) 
{ 
    int k=0; 
    FILE *fp; 
    unsigned char cd[255]; 
    unsigned long cd1[500]; 
    char *buffer; 
    unsigned long sa=80044; 
    int j=0,i=0,n=0; 
    DIR *dir; 
    struct dirent *direntry; //could be a file, or a directory 

    dir = opendir("C:/Documents and Settings/Administrator/Desktop/vicky"); 
    if(!dir) { 
    printf("Error: directory did not open!\n"); 
    return 1; 
    } 

    while((direntry=readdir(dir))!=NULL) { 
    if(++k < 100) 
    { 
    printf("%s\n",direntry->d_name); 
    sprintf(buffer,"%s",direntry->d_name);//here i got the unhanded exception. 
    fp=fopen("buffer","rb"); 
    sa=sa-44; 
    sa=sa/8; 

    if(fp==NULL) 
{ 
    printf("file not found!"); 
} 
else 
     { 
     for(j=0;j<(sa);j++) 
     { 
      for(i=0;i<8;i++) 
      { 
       cd[i]=fgetc(fp);//get each character from file 

       // printf("%c",cd[i]); 

      } 
      if(i==8)//if the i is 8 the character then do the following,just read 8 bytes and then calculate the cd1. 
      { 
       sa=sa-8; 
       cd1[j]=(cd[6] * 65536 + cd[5] * 256 + cd[4]);//multiply the positional weightage and calculate the cd1,which contains the 7 digits decimal value. 

       //if((cd1[j]> 0x7FFFFF)&&(cd1[j]<=0xFFFFFF)) 

       //cd1[j]=cd1[j]- 0xFFFFFF; 
       //cd1[j]=cd1[i] * -1; 

      } 
     printf("completes first 8 bytes read:%d - %d",j,cd1[j]);//print j and cd1[j] value in console window 

     } 
     fclose(fp);//close the file 
    } 


    } 
    if((strcmp(direntry->d_name, "text.txt"))==0) { 
    printf("\nThe %s file has been found\n",direntry->d_name); 

    k=-99; //just a flag value to show the file was found 
    break; 
    } 

    } 
    if(k!=-99) 
    printf("\nThe test.txt file was not found\n"); 

    closedir(dir); 

    printf("\n"); 
    getchar(); 
    return 0; 

} 

これは私が得たエラーです:READ_TEXT.exeで0x1029a189で未処理の例外(msvcr90d.dll):0xc0000005で:アクセス違反の書き込み場所0xcccccccc.Kindlyは私に「direntry-> d_name」ファイルを読むための任意の提案をしましょう上記のロジックを処理するための名前。

+0

バッファが割り当てられていません – CashCow

+0

割り当て問題を修正した後、 "buffer"という名前のファイルを開こうとします。 'fopen'の呼び出し中の文字列を文字列' 'buffer ''ではなく変数 'buffer'に変更します。また、成功するためには、ファイルのフルパスを 'buffer'変数に入れる必要があります。 –

+0

joachimに感謝、私はディレクトリ内の各ファイルを読み込み、コンソールウィンドウに表示することができます。その後、私はファイルを開くしようとしています.whichはここで起こっていません。私は変数としてバッファを変更しました。string.dir varaibleにはディレクトリパスが含まれていますか?これを正しく動作させる方法はありますか? – user1133907

答えて

0

を試してみてください脇に置いて使用する準備が整いました。お使いのプラットフォームで提供されている場合は、snprintf()を使用してください。

+0

返信ありがとう...それは働いた..しかし、sprintf()自体を使用します.MS VC++ 2008はコンパイラを使用しています。 – user1133907

+0

ここにファイルが見つかりません!コンソール出力のファイル名。例:ファイルが見つかりません! filename.txt.but実際の出力は期待通りではありません。なぜ、そのディレクトリ内のファイルを開き、他の操作を行うことはできません。 – user1133907

0

bufferは割り当てられません。 sprintf()は基本的に "どこにも"書き込もうとしていません。

宛先変数は、mallocを使用してヒープ上に割り当てるか、スタック上でその使用を現在のスコープに制限する必要があります。

0

あなたはchar * bufferだけを宣言しましたが、malloc()を使ってメモリを割り当てません。

0

問題は初期化されていないポインタです。

char buffer[1024]; 

あなたはメモリプットを持って確認しているその方法:

文字は簡単のため、通常の配列をバッファリングしてくださいmalloc関数とポインタを初期化したり、アレイ

char buffer[1024]; 
0

変更

char * buffer; 

char buffer[MAX_PATH]; 

または類似のものに。

0

Uは、バッファ変数にメモリを割り当てる必要があります。 char * buffer;私は すべてのデータを持つことができるようにステートメントは任意のメモリを割り当てていません。

これでもっとうまくいきます。 chat buffer [// buffer length];

またはchar * buffer = new char(//バッファ長)。

またはchar バッファ=(char)malloc(//バッファ長)。

上記の文は、メモリを割り当てて問題を解決します。

関連する問題