我必须从二进制文件中获取特定的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语言的书中的字符串。

09-30 00:27