Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 数组的值在退出循环时更改_C_Loops_For Loop - Fatal编程技术网

C 数组的值在退出循环时更改

C 数组的值在退出循环时更改,c,loops,for-loop,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]);

谢谢大家!!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;
字节(字节[块大小]);
对于(int i=0;i
内部“for loop”字节的值打印正确。字节[0]的值为104。 字节[0]的循环外值为0。 为什么不是104?
字节1、2和3的值在循环外是正确的。

在字节数组中读取时,使用第一个值
字节[0]
*字节
作为暂存空间。有几种方法可以解决此问题:

临时变量-不使用
*字节
,而是创建一个临时变量:

for (int i = 0; i < block_size; i++) {
    BYTE tmp;

    fread(&tmp, sizeof(BYTE), 1, inptr);
    byte[i] = tmp;
}
您的代码看起来有点像是混淆了前两个方法和第三个方法

最后,请注意:
BYTE
不是标准类型,因此请包含
typedef
以便我们知道您在说什么。你的声明使我偏离了正轨

BYTE (byte[block_size]);
括号看起来很奇怪,尽管它们的语法似乎正确。去掉它们后,该行看起来就像一个数组声明,当然是:

BYTE byte[block_size];

如果
BYTE
是一种类型,那么这是什么
BYTE(BYTE[block_size])!?对不起,我跑得太快了。fread(&byte,sizeof(byte),block_size,inptr)解决了这个问题。字节(字节[块大小])被错误写入。没有()是正确的。对不起,我太快了。fread(&byte,sizeof(byte),block_size,inptr)解决了这个问题。字节(字节[块大小])被错误写入。事实上,主要的错误是这一行:(记住它在一个循环中一次读取一个字节。)fread(&byte,sizeof(byte),1,inptr);这一行应该是:fread(&byte[i],sizeof(byte),1,inptr);顺便说一句:使用已定义的名称,代码只更改大小写是一种非常糟糕的做法。像BYTE myArray[block_size]这样的东西会更好。让所有的定义值都是大写会更好,因为可读性谢谢!fread(&byte[i],sizeof(byte),1,inptr)解决了这个问题。
BYTE (byte[block_size]);
BYTE byte[block_size];