我有这个:
#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;
}
每次返回0,即使文件实际上是10行。
答案 0 :(得分:3)
sizeof(file)
是指针变量file
的大小。您想将Size
传递给ReadFile
您可能还希望明确使用char
而不是TCHAR
- 如果您使用UNICODE
进行编译,那么它将无效,您将访问未分配的内存。
答案 1 :(得分:1)
sizeof(file)
那部分是错的。你想把Size
放在那里。 sizeof(file)
为您提供变量file
的大小(对应于指针的大小,即4或8个字节),而不是文件本身的大小。
您应该检查ReadFile
在代码的第一部分中,您在第二部分使用变量Size
变量fileSize
。这看起来不对。您当然没有在发布的代码中为fileSize
分配正确的大小。请发布完整的编译代码。
此外,您还有char大小问题。如果您的程序编译为unicode,那么TChar
将成为一个宽字符(2个字节)。但是你将TChar
视为等同于一个字节。
你也不检查你的malloc的结果。如果文件太大,它将是null
。