我正在尝试编写一个函数,该函数仅使用基于指针的逻辑来在内存区域(baseAddr)中搜索某个字节(Byte),计算出现的次数,并将偏移量存储在数组中(偏移量)。这是我到目前为止的内容:
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
答案 0 :(得分:2)
bytesRead
是一个uint8_t
,最大值为255。如果您有uint32_t length
,则偏移量应为相同的数据类型。而且由于可能每个字节都可能是一个匹配项,所以您的计数(返回值)也需要与offsets数组一样为同一类型。
更多问题:
if ((baseAddr + bytesRead) == Byte)
这里没有取消引用指针,只是在检查它的值。您的编译器应在此处针对类型不匹配发出警告。
尝试:
if (*(baseAddr + bytesRead) == Byte)
最后,您需要确保offsets
指向足够的内存。同样,可能*每个字节都可以匹配,这意味着offsets
的长度(以元素为单位)应与输入数据相同。