2

我是 C/C++ 新手,需要帮助。

所以这就是我所做的:

   HANDLE OpenH = CreateFile(filePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
   HANDLE hMapFile = CreateFileMapping(OpenH, NULL,PAGE_READONLY,0,0,FFD.cFileName);
   char * pBuf = (char *) MapViewOfFile(hMapFile,FILE_MAP_READ,0,0,0);
   if(strstr(pBuf,searchword) != 0)

我正在映射包含大量数据的文本文件,我必须pBuf在 a strstrstrcmpstrtok和其他函数中使用指针,但pBuf它的末尾没有空终止字符,它给了我访问冲突每次我在函数中使用它。那么我该如何使用pBuf呢?

4

2 回答 2

1

我想strstr这不是用于此目的的正确功能...
您可以使用memchr来定位第一个字符,然后检查其余字符是否合适:

int chr = 'a';
//DWORD size = GetFileSize(OpenH);
unsigned length = ... // obtain length of pBuf
const void* ptr = memchr(pBuf, chr, length);
if(ptr != NULL){
....
}

这有点乏味,但最终会导致结果。

编辑:

使用 Win32GetFileSize函数,您可以确定文件的当前大小,也应该与映射一起使用。

于 2013-08-07T08:38:58.320 回答
1

简单地说,您需要知道文件有多大,以及随时可用的信息。然后您需要使用不依赖于以空值终止的缓冲区的搜索功能。如果您的库没有这样的功能,那么我想您将需要自己编写。

于 2013-08-07T09:28:42.330 回答