簡體   English   中英

計算Windows C中文件的行數

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM