如何检查Array中是否存在(Sub)数组

问题描述 投票:3回答:1

我需要strstrmemcmp之间的东西来检查一个内存范围内是否存在数组。

示例我想要实现的目标:

BYTE a[] = { 0x01, 0x02, 0x03, 0x04 };
BYTE b[] = { 0x02, 0x03 };
if (mem_in_mem(a, b, 4 * sizeof(BYTE)) == 0) {
    printf("b is in memory range of a\n");
}

任何想法我怎么能这样的? (应该与Windows一起工作)

c windows
1个回答
4
投票

函数mem_in_mem应该取两个数组的大小。这是一个简单的实现:

#include <string.h>

void *mem_in_mem(const void *haystack, size_t n1, const void *needle, size_t n2) {
    const unsigned char *p1 = haystack;
    const unsigned char *p2 = needle;

    if (n2 == 0)
        return (void*)p1;
    if (n2 > n1)
        return NULL;

    const unsigned char *p3 = p1 + n1 - n2 + 1;
    for (const unsigned char *p = p1; (p = memchr(p, *p2, p3 - p)) != NULL; p++) {
        if (!memcmp(p, p2, n2))
            return (void*)p;
    }
    return NULL;
}

你会这样调用它:

BYTE a[] = { 0x01, 0x02, 0x03, 0x04 };
BYTE b[] = { 0x02, 0x03 };
if (mem_in_mem(a, sizeof a, b, sizeof b)) {
    printf("b is in memory range of a\n");
}
© www.soinside.com 2019 - 2024. All rights reserved.