而不是在主要内部工作

时间:2014-10-16 13:50:47

标签: c winapi while-loop

我想尝试一些win32函数来管理文件。 特别是,我想创建一个程序,将文件作为输入,并将其打印为反向。

#include <stdio.h>
#include <windows.h>
#include <stdlib.h>

void prova()
{
    int z = 0;
        while(z<5)
        {
            puts("Helloworld!");
            z++;
        }
}

int m = 0;

int main(int argc, char **argv)
{
    LPDWORD lpFileSizeHigh;
    HANDLE file;
    file = CreateFile(
            argv[1],
            GENERIC_READ,
            FILE_SHARE_READ,
            NULL,
            OPEN_EXISTING,
            FILE_ATTRIBUTE_NORMAL,
            NULL);

    if(file == INVALID_HANDLE_VALUE)
    {
        printf("Error on opening the file: %x", GetLastError());
        return 1;
    }

    DWORD fileSize = GetFileSize(file, lpFileSizeHigh);

    CloseHandle(file);

    printf("fileSize:   %d\n", fileSize );


    prova();

    while(m<5)
    {
        puts("Hello, world!");
        m++;
    }

    return 0;
}

为了清楚和简洁起见,我重新安装了代码并删除了未到达的倒车部件。

这段代码非常适用,打印出10次Hello,World。但是,如果在main函数中定义m变量,它会因某种原因停止响应。 如果我删除文件相关代码,它会再次开始工作O_o 我是c语言的菜鸟,因为我没有多少经验,但我不明白为什么会这样做。

我在Windows 8上使用Eclipse和mingw。

1 个答案:

答案 0 :(得分:1)

LPDWORD lpFileSizeHigh;

这会分配一个指针,但不会对其进行初始化。

DWORD fileSize = GetFileSize(file, lpFileSizeHigh);

这会将未初始化的指针传递给GetFileSize,此时可能会发生任何事情。

声明变量:

DWORD FileSizeHigh;

并传递其地址:

DWORD fileSize = GetFileSize(file, &FileSizeHigh);

FWIW,GetFileSizeEx更容易使用。