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:在文件中搜索字符串全部内容,希望文章能够帮你解决C:在文件中搜索字符串所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)