gpt4 book ai didi

C:查找内存区域中出现的字节

转载 作者:太空宇宙 更新时间:2023-11-04 07:52:44 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,该函数仅使用基于指针的逻辑在内存区域 (baseAddr) 中搜索特定字节 (Byte),计算出现次数,并将偏移量存储在数组 (Offsets) 中。这是我目前所拥有的:

uint8_t findBytes( uint16_t* const Offsets, const uint8_t* const baseAddr,
uint32_t length, uint8_t Byte) {
uint8_t bytesRead = 0;
int count = 0;
while (bytesRead < length) {
if ((baseAddr + bytesRead) == Byte) {
*(Offsets + count) = bytesRead;
count++;
}
bytesRead++;
}

return count;
}

无论出于何种原因,如果我使用 (bytesRead < length),我总是会陷入无限循环。长度始终为 1024。这段代码究竟有什么问题?我仍在学习指针的正确用法,所以我 99% 确定这与此有关。

最佳答案

bytesRead 是一个 uint8_t,它的最大值为 255。如果你有一个 uint32_t 长度,你的偏移量应该是相同的数据类型。由于可能每个字节都可以匹配,因此您的计数(返回值)也需要与偏移量数组相同。

更多问题:

if ((baseAddr + bytesRead) == Byte)

您并没有在此处取消引用指针,您只是在检查它的值。您的编译器应该在此处针对类型不匹配发出警告。

尝试:

if (*(baseAddr + bytesRead) == Byte)

最后,您需要确保 offsets 指向足够的内存。同样,可能*每个字节都可以匹配,这意味着 offsets 的长度(以元素为单位)应该与输入数据相同。

关于C:查找内存区域中出现的字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52760685/

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