【发布时间】:2011-02-13 07:59:32
【问题描述】:
我如何在 u_char* 指向的字符串中查找 substr,因为所有 C 函数都将 char* 作为参数?
【问题讨论】:
我如何在 u_char* 指向的字符串中查找 substr,因为所有 C 函数都将 char* 作为参数?
【问题讨论】:
假设u_char 是unsigned char 的typedef,那么通常的技巧是使用标准函数并应用强制转换。
不过,这非常笨拙,因此您可以改用自动应用强制转换的宏。
#define STRSTR(haystack, needle) \
((u_char *)strstr((char *)haystack, (char *)needle))
如果您的编译器支持 C99,您也可以编写 inline 函数。
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 在 BSD 类型套接字实现(*nix 中的 sys/types.h 和 Windows 中的 winsock.h)中定义为 unsigned char 的 typedef,如果这是您的上下文,您可以安全地应用强制转换(char*) 在将它们传递给标准 C 函数之前。如果这不是您的上下文,那么您必须找到 u_char 的声明并确认它是 unsigned char 或等效类型,然后才能安全地应用强制转换。
【讨论】: