【发布时间】:2014-12-11 22:11:00
【问题描述】:
我想尝试一些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。
【问题讨论】:
-
当你在
main()中声明它时,你是否也将它初始化为 0? -
编译所有警告和调试信息。了解如何使用调试器。
-
@FatalError 我将您看到的代码 (int m=0) 剪切粘贴到括号后的 main 中。
-
@DavidHeffernan 此代码有效。正如我所说,只需将 int m=0 移动到 main 内,它将不起作用。有那么难吗?下次我将复制整个代码的 2 倍,因为你不能剪切粘贴一行;)
-
@BasileStarynkevitch 调试器对我没有帮助,因为它也被终止了。似乎它在 DWORD fileSize = GetFileSize(file, lpFileSizeHigh); 之后被杀死还是谢谢!
标签: c winapi while-loop