谢谢! fread(& byte [i],sizeof(BYTE),1,inptr)解决问题。
部分代码:
BYTE (byte[block_size]);
for (int i = 0; i < block_size; i++)
{
fread(&byte, sizeof(BYTE), 1, inptr);
byte[i] = *byte;
printf("b[%i] = %i\t", i, byte[i]);
}
printf("b0 = %i, b1 = %i, b2 = %i, b3 = %i\n", byte[0], byte[1], byte[2], byte[3]);
return 0;
内部“for循环”字节的值正确打印。 byte [0]的值为104。 在字节[0]的循环值之外是0。 为什么不是104? 字节1,2和3的值在循环外是正确的。
答案 0 :(得分:2)
当您读入字节数组时,使用第一个值byte[0]
或*byte
作为临时空间。有几种方法可以解决这个问题:
临时变量 - 而不是使用*byte
,创建一个临时变量:
for (int i = 0; i < block_size; i++) {
BYTE tmp;
fread(&tmp, sizeof(BYTE), 1, inptr);
byte[i] = tmp;
}
直接访问 - 如果您稍后再复制它,您真的不需要临时变量,因此您可以直接处理要写入的字节:
for (int i = 0; i < block_size; i++) {
fread(&byte[i], sizeof(BYTE), 1, inptr);
}
读取块 - 实际上,您甚至不需要循环,因为fread
已经读取了一定数量的块:
fread(byte, sizeof(BYTE), block_size, inptr);
您的代码看起来有点混淆了前两个和第三个方法。
最后,注意:BYTE
不是标准类型,因此请加入typedef
,以便我们知道您在谈论什么。你的声明让我偏离了轨道
BYTE (byte[block_size]);
括号看起来很奇怪,虽然它们似乎是正确的语法。摆脱它们,那条线看起来像一个数组声明,当然是:
BYTE byte[block_size];