我必须从二进制文件中获取一个特定的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尺寸更改为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
答案 0 :(得分:0)
看看:
r15[counter-1]=r;
您将r的地址分配给数组,但是您想将r的值分配给数组,因此请使用:
strcpy( r15[counter-1], r);
... r
必须大5才能包含终止空值。
同样,在分配存储时,您必须为每个字符串分配5个字节。请阅读有关C语言的书中的字符串。