gpt4 book ai didi

c - 读取一个文件并写入另一个 C

转载 作者:太空宇宙 更新时间:2023-11-04 02:41:01 24 4
gpt4 key购买 nike

我正在尝试读取文件并写入临时文件。但是,我现在陷入了无限循环。下面的函数被遍历目录以读取文件的递归函数多次调用。

我的方法是从一个文件中读取每个单词,然后将这些单词读取到另一个文件中。

如果我只打印出每个单词,我的功能就可以正常工作。它打印出所有目录中每个文件中的每个单词。但是,当我尝试开始写入临时文件(代码被注释掉)时,我陷入了 while 循环。

另一方面,如果我只在测试程序中调用该函数一次,我只是从当前目录中的一个文件中读取,然后写入一个临时文件,就没问题。

这就是我所拥有的(fileName 传入时实际上是绝对路径,我做../tmp 所以它不会被递归函数捕获):

void fileReadWrite(char *pattern, char *before, char *replace, char *fileName) {
FILE *file = fopen(fileName, "r");

if (file != NULL) {
int ch, word = 0;
while ((ch = fgetc(file)) != EOF) {
if (isspace(ch) || ispunct(ch)) {
if (word) {
word = 0;
putchar('\n');
}
}
else {
word = 1;
putchar(ch);

/*
FILE *f = fopen("../tmp", "wb"); // create and write
if (f == NULL)
{
printf("Error opening file!\n");
exit(1);
}

fprintf(f, "Some text"); // Or fprintf(f, ch);

fclose(f);
*/
}
}
fclose(file);
}
}

最佳答案

您的代码中没有任何内容表明存在无限循环。但是,如果 fileName 非常大,您可能会打开和关闭“..\tmp”数百万次。正如 Joachim Pileborg 在评论中指出的那样,您应该在函数开始时只打开该文件一次,然后在结束时再次关闭它。

如果您想说服自己不是在无限循环中,请在每次迭代时打印出ch 的值。

关于c - 读取一个文件并写入另一个 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31777890/

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