【发布时间】:2021-12-09 08:41:07
【问题描述】:
我对@987654321@ 在C 中的工作技术有点困惑。我观察了memchr() 的不同实现,发现首先它将字符或数字转换为unsigned char 类型,然后逐字节搜索数组。
我有两个问题:
1.如果它将任何内容转换为unsigned char,那么它如何比较大小大于unsigned char 的数字,例如int 类型。
2.如果是逐字节比较返回然后返回字符第一次出现的地址,那么假设我要在数组中搜索0x8。
#include <stdio.h>
#include <string.h>
int main(void)
{
const int arr[5] = {0x1021, 0x8988, 0x706, 0x50, 0x22};
int * ptr;
ptr = memchr(arr, 0x89, sizeof(arr));
printf("arr:%p ptr:%p\n", arr, ptr);
return 0;
}
它应该返回数组第 3 个字节的地址,因为 0x89 与第 7 个字节的数组元素 0x8988 的第一个字节匹配,因为 memchr() 逐字节匹配 (unsigned char) 不是int 类型。
假设:int 是 4 个字节,unsigned char 是 1 个字节。
【问题讨论】:
-
一般来说,尝试在任何其他类型的数组上使用
memchr是不可移植的。
标签: arrays c pointers memory string.h