字符串搜索u_char*

字符串搜索u_char*,c,string,substring,C,String,Substring,当所有C函数都以char*作为参数时,如何在u_char*指向的字符串中查找substr?假设u_char是无符号char的typedef,那么通常的技巧是使用标准函数并应用强制类型转换 但是,这非常笨拙,因此您可以使用自动应用强制转换的宏 #define STRSTR(haystack, needle) \ ((u_char *)strstr((char *)haystack, (char *)needle)) 或者,如果编译器支持C99,则可以编写内联函数

当所有C函数都以char*作为参数时,如何在u_char*指向的字符串中查找substr?

假设u_char是无符号char的typedef,那么通常的技巧是使用标准函数并应用强制类型转换

但是,这非常笨拙,因此您可以使用自动应用强制转换的宏

#define STRSTR(haystack, needle) \
                 ((u_char *)strstr((char *)haystack, (char *)needle))
或者,如果编译器支持C99,则可以编写内联函数

static inline u_char *ustrstr(u_char *haystack, u_char *needle)
{
    return (u_char *)strstr((char *)haystack, (char *)needle);
}
或者您可以简单地编写封面函数:

u_char *ustrstr(u_char *haystack, u_char *needle)
{
    return (u_char *)strstr((char *)haystack, (char *)needle);
}

由于u_char在Windows中的BSD类型套接字实现sys/types.h in*nix和winsock.h中定义为无符号字符的typedef,如果这是您的上下文,您可以在将字符*传递给标准C函数之前安全地对其应用强制转换。如果这不是您的上下文,那么您必须找到u_char的声明,并确认它是unsigned char类型或等效类型,只有这样才能安全地应用强制转换