数组的值在退出循环时会发生变化

时间:2014-06-09 10:04:29

标签: c loops for-loop

谢谢! 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的值在循环外是正确的。

1 个答案:

答案 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];