为什么strstr
对于以下代码,该函数始终返回true:
void main(){ char* a = "qweqweqweqweqweqw"; char b[5] = {0x00,0xff,0xaa,0xbb,0xcc}; printf("%p",strstr(a,b)); }
当我将null字符串替换为0x00
其他字符串时,错误消失了。请帮我理解为什么?
来自strstr
:
char *strstr(const char *haystack, const char *needle);该
strstr()
函数在字符串干草堆中查找子字符串针的首次出现。
由于字符串在C中以null终止并且0x00
表示一个null字节,b
因此有效""
。
搜索空字符串始终会产生true,因此您的程序将始终找到子字符串。
strstr
为弦乐而设计。没有字符串包含0x00
为字符,因此strstr
在这里不起作用。您需要编写一个自定义搜索功能(如)binbin
,以在二进制数据中查找二进制数据。函数签名可能是这样的:
unsigned char* binbin(const unsigned char* haystack, size_t haystack_len, const unsigned char* needle, size_t needle_len);
在此处传递大小是因为我们不能对数据进行空终止。