假设我有以下内容:
wchar_t *x = L"myname";
void *y = 0; // assume that p is already assigned previously to any given buffer
如何判断unicode char指针x
是否在void * y
缓冲区内?
基本上
如果干草堆是一个无效指针,并且针是unicode char指针,我如何在大海捞针中找到针?
答案 0 :(得分:1)
如果你知道缓冲区的长度(以字节为单位),你可以这样做。
#include <stdbool.h>
char *tmp = x; //you can do byte arithmetic on char*, but not on void*
bool is_in_buffer = ((char*)y >= tmp && (char*)y < tmp + length);
因为你知道缓冲区的长度并且缓冲区存储在连续的内存中,如果y在缓冲区的范围内,你知道y在缓冲区中。
请注意,您只能将非char类型的指针指定给char和void。否则会违反严格的别名规则,该规则存在于C99和C11中。