[英]Count the number of lines of a file in windows C
我有這個:
#include "stdafx.h"
#include <windows.h>
#include <assert.h>
int _tmain(int argc, _TCHAR* argv[])
{
LPCTSTR filePath = argv[1];
DWORD numLines = _ttoi(argv[2]);
HANDLE fileHandle = CreateFile(filePath,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_FLAG_SEQUENTIAL_SCAN,NULL);
DWORD fileSize = GetFileSize(fileHandle, NULL);
TCHAR* file = (TCHAR*)malloc(fileSize);
DWORD bytesRead=0;
ReadFile(fileHandle,file,fileSize,&bytesRead,NULL);
DWORD numLinesFile = 0;
for(DWORD i = 0;i<fileSize;i++)
if(file[i] == '\n')
numLinesFile++;
free(file);
CloseHandle(fileHandle);
return 0;
}
即使文件實際上是10行長,每次返回0。
sizeof(file)
是指針變量file
大小。 您想將Size
傳遞給ReadFile
您可能還希望顯式使用char
而不是TCHAR
如果使用定義的UNICODE
編譯將無法正常工作,則您正在訪問未分配的內存。
sizeof(file)
那部分是錯誤的。 您要在其中放置Size
。 sizeof(file)
給出變量file
的大小(與指針的大小相對應,即4或8個字節),而不是文件本身的大小。
您應該檢查ReadFile
的返回值
在代碼的第一部分中,使用變量Size
,在第二部分中,使用變量fileSize
。 看起來不對。 在發布的代碼中,您當然沒有為fileSize
指定正確的大小。 請發布完整的編譯代碼。
此外,您還有字符大小的問題。 如果您的程序被編譯為unicode,則TChar
將成為一個寬字符(2個字節)。 但是您將TChar
視為等效於一個字節。
而且您也不檢查malloc的結果。 如果文件太大,則為null
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.