2013-08-07 40 views
2

我是C/C++新手,需要幫助。如何使用從MapViewOfFile給出的指針,當它不以空字符結尾時?

所以這是我做的:

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) 

我有很多在他們的數據映射文本文件,我必須使用指針pBufstrstrstrcmpstrtok等功能,但pBuf在它的末尾沒有空終止字符,並且每次在函數中使用它時都會觸發訪問。那麼我怎樣才能使用pBuf

+1

Euh,也許'NUL'-終止緩衝區呢?或複製超過&0期。副本? – 2013-08-07 08:34:41

+1

另外,如果這是C而不是C++,'(char *)MapViewOfFile'強制轉換是多餘的,並且被認爲是一個錯誤。不要施放'void *'。 – 2013-08-07 08:37:24

+1

如果你有任何想法緩衝區有多大,那麼H2CO3提出的似乎可行。例如。像'char temp_buf [200] =「」; strncpy(temp_buf,pBuf,200);' – Nobilis

回答

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){ 
.... 
} 

這是一點點乏味,但最終會導致結果。

編輯:

使用Win32 GetFileSize -function你能確定該文件的當前大小,應與測繪工作,太。

+0

我在想,可能有一個標準或更簡單的方法來做到這一點,但如果沒有這樣的方式,我會試試這個。謝謝。 –

+0

不客氣。那麼,在純粹的C語言中,沒有多少選擇,因爲你主要處理原始內存。 stdlib通常依賴於你告訴它緩衝區有多長...... –

+0

好的,你有什麼建議嗎?我怎樣才能獲得'pBuf'的長度,一種不使用空字符的方法? –

1

簡單地說,你需要知道文件有多大,信息是容易獲得的。然後您需要使用不依賴於以空終止的緩衝區的搜索功能。如果你的圖書館沒有這樣的功能,那麼我想你會需要自己寫。

相關問題