如果我有:

const char *mystr = "cheesecakes";
FILE *myfile = fopen("path/to/file.exe","r");

我需要编写一个函数来确定 myfile 是否包含任何出现的 mystr 。有人可以帮助我吗?谢谢!

更新:所以事实证明我需要部署到的平台没有 memstr 。有谁知道我可以在我的代码中使用的免费实现吗?

最佳答案

如果您无法将整个文件放入内存中,并且您可以访问 GNU memmem() 扩展名,则:

  • 尽可能多地读入缓冲区;
  • 使用 memmem(buffer, len, mystr, strlen(mystr) + 1) 搜索缓冲区;
  • 丢弃缓冲区中除最后一个 strlen(mystr) 字符以外的所有字符,并将它们移至开头;
  • 重复直到到达文件末尾。

  • 如果您没有 memmem ,那么您可以使用 memchrmemcmp 在普通 C 中实现它,如下所示:
    /*
     * The memmem() function finds the start of the first occurrence of the
     * substring 'needle' of length 'nlen' in the memory area 'haystack' of
     * length 'hlen'.
     *
     * The return value is a pointer to the beginning of the sub-string, or
     * NULL if the substring is not found.
     */
    void *memmem(const void *haystack, size_t hlen, const void *needle, size_t nlen)
    {
        int needle_first;
        const void *p = haystack;
        size_t plen = hlen;
    
        if (!nlen)
            return NULL;
    
        needle_first = *(unsigned char *)needle;
    
        while (plen >= nlen && (p = memchr(p, needle_first, plen - nlen + 1)))
        {
            if (!memcmp(p, needle, nlen))
                return (void *)p;
    
            p++;
            plen = hlen - (p - haystack);
        }
    
        return NULL;
    }
    

    关于C:在文件中搜索字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2188914/

    10-15 06:41