バイナリファイルから特定の2バイト値を取得する必要があります。ループ印刷r15 [i]の中に正しい値(0000、fff6、....)ループの外側で、r15全体を繰り返し繰り返し、1つの値0100を表示します。 ファイルからバイトごとに読み込み、2つの値の値を連結してr15 [カウンタ]に保存します。だから私の質問は、バイナリファイルから2bytesの値を読み取る正しい方法ですか?そして、ループの最後で配列r15の値を変更するのは何ですか?バイナリから読み込んだり、ストリングをダブル配列の文字列
char **r15;
r15 = (char **) malloc(sizeof(char *)*50000);
for(i=0; i<50000; i++) r15[i] = (char *) malloc(sizeof(char)*5);
fp = fopen("file.bin", "rb");
if (fp == NULL) {
printf("fail opning file\n");
exit(EXIT_FAILURE);}
int i;
int check;
char r[5];
unsigned int counter=1;
while((check=getc(fp)) != EOF){
fseek(fp,32*counter-2, SEEK_SET);
fread(buffer,1,2,fp);
sprintf (r, "%02x%02x", buffer[0], buffer[1]);
r15[counter-1]=r;
printf("r15[%d] %s\n",counter-1,r15[counter-1]);
counter++;
}
// result here diffrent than printing inside while loop
for(i=0;i<counter-1;i++) printf("r15[%d] %s\n",i,r15[i]);
edit1:まだrサイズを5に変更しても、ループ内に印刷された値は外側に印刷された値とは異なります。 EDIT2:これで
r15[counter]=r; or strcpy(r15[counter],r);
::私は交換することで解決策を見つけた
r15[counter][0]=r[0];
r15[counter][1]=r[1];
r15[counter][2]=r[2];
r15[counter][3]=r[3];
それはstrcpyのはstrncpyとR15では動作しなかった理由はまだ私はそれを得ることはありません[カウンター] = rでの
"ループ内にr15を印刷すると正しい値が表示されるので"を参照してください。 4文字の文字を保持するには5つの大きさでなければならず、printfはヌル文字を追加するので、5つの大きな文字として宣言する必要があります。あなたはここで幸運でした。 –