如果我有:
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
,那么您可以使用 memchr
和 memcmp
在普通 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/