我必须从二进制文件中获取特定的2bytes值,在循环打印r15 [i]内显示正确的值(0000,fff6,....),但是在循环外,遍历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 size更改为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 [counter] = r一起使用
最佳答案
看着:
r15[counter-1]=r;
您将r的地址分配给该数组,但您想将r的值分配给该数组,因此请使用:
strcpy( r15[counter-1], r);
...并且
r
必须大5以包括终止null。同样,在分配存储空间时,必须为每个字符串分配5个字节。请阅读有关C语言的书中的字符串。