gpt4 book ai didi

c - 退出循环时数组的值发生变化

转载 作者:太空宇宙 更新时间:2023-11-04 08:39:56 25 4
gpt4 key购买 nike

谢谢! 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。byte[0] 的循环外值为 0。为什么不是104?字节 1、2 和 3 的值在循环外是正确的。

最佳答案

当您读入字节数组时,您使用第一个值 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);
}

读取 block - 事实上,您甚至不需要循环,因为 fread 已经读取了一定数量的 block :

fread(byte, sizeof(BYTE), block_size, inptr);

您的代码看起来有点像是混淆了前两种和第三种方法。

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

BYTE (byte[block_size]);

括号看起来很奇怪,尽管它们似乎是正确的语法。去掉它们,那一行看起来像一个数组声明,当然是:

BYTE byte[block_size];

关于c - 退出循环时数组的值发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24117910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com