gpt4 book ai didi

c - 为什么c中的createfile函数停止for循环

转载 作者:行者123 更新时间:2023-11-30 18:27:08 25 4
gpt4 key购买 nike

我正在尝试创建一个获取参数的脚本,为每个参数创建一个以该参数作为内容的文件。

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

int main(int argc, char *argv[]){
HANDLE hfile;
char *filename;
char *data;
for(int i=1; i<argc; i++){
data = argv[i];
printf(data);
sprintf(filename, "C://temp//%d.txt",i);
printf(filename);
hfile = CreateFile(
filename,
GENERIC_WRITE,
0,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);
printf("asdasd");
BOOL writetofile;
writetofile = WriteFile(
hfile,
data,
strlen(data),
0,
NULL
);
printf("done");
}
}

调试后,正如您在 printfs 中看到的那样,脚本仅运行循环一次。命令行:

./a.exe a b c d

输出:

a

最佳答案

有几个问题。这是我的头顶上的 5 个:

    如果您想使用 sprintf
  1. filename 不能是 char *。它需要一个有效的内存缓冲区。
  2. 您需要使用 / 而不是 //
  3. 写入文件后需要使用CloseHandle()来关闭文件。
  4. 对于 WriteFile()lpNumberOfBytesWritten 不能为 NULL
  5. 始终检查文件是否正确打开。

这是我能想到的最简单的代码:

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

int main(int argc, char *argv[]){
HANDLE hfile;
char filename[50] = {0,};
char *data;
for(int i=1; i<argc; i++){
data = argv[i];
printf(data);
sprintf(filename, "C:/temp/%d.txt",i);
printf(filename);
hfile = CreateFile(
filename,
GENERIC_WRITE,
0,
NULL,
OPEN_ALWAYS,
FILE_ATTRIBUTE_NORMAL,
NULL
);

printf("asdasd");
if (hfile != INVALID_HANDLE_VALUE) {
DWORD writtenSize = 0;
BOOL writetofile = WriteFile(
hfile,
data,
strlen(data),
&writtenSize,
NULL
);

if (writetofile) {
printf("write done.");
}

CloseHandle(hfile);
}

printf("done");
}
}

尽管对文件名使用固定缓冲区大小可能不是一个好主意,但我认为我纠正了大部分代码错误。

关于c - 为什么c中的createfile函数停止for循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59154021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com