【发布时间】:2017-07-08 00:03:59
【问题描述】:
我必须从二进制文件中获取特定的 2bytes 值,在循环打印 r15[i] 内显示正确的值(0000,fff6,...),但在循环外,再次遍历 r15 显示只有一个值 0100。 从文件中读取我一个字节一个字节地完成,我连接两个值并将其保存在 r15[counter] 中。所以我的问题是,这是从二进制文件中读取 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[counter]=r
【问题讨论】:
-
“因为在循环内打印 r15 显示正确的值”是无关紧要的。它必须为 5 大以容纳 4 个字符,并且 printf 将附加一个空字符,因此需要将其声明为 5 大。你在这里很幸运。