我必須從一個二進制文件,在循環打印r15 [i]顯示正確的值(0000,fff6,....),但在一個特定的2字節值,但在循環之外,遍歷整個r15再次只顯示一個值0100. 從文件中讀取我逐字節地完成並將兩個值連接起來,並將其保存在r15 [counter]中。所以我的問題是,這是從二進制文件中讀取2字節值的正確方式嗎?以及什麼使陣列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顯示正確的值」是無關緊要的。它必須是5個大的容納4個chararcters,並且printf將追加一個空字符,所以它需要被聲明爲5個大字符。你在這裏很幸運。 –