在C中处理FILE数组

  • 本文关键字:FILE 数组 处理 c
  • 更新时间 :
  • 英文 :


我需要修改一个用C编写的程序,我对它的经验很少,我想处理一组文件。然而,当我想写入这些文件时,我遇到了处理指针的问题。。。

以下是查看我想做什么的最小代码:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void func(FILE *f){
fprintf(f, "testn");
}
void func_1(FILE *f){
fprintf(f[0], "testn");
}
void func_2(FILE *f){
fprintf(f[0][0], "testn");
}
int main() {
FILE *f = fopen("test.txt", "w");
func_1(f);
fclose(f);
FILE *f_1[2];
f_1[0] = fopen("test.txt", "w");
f_1[1] = fopen("test_2.txt", "w");
func_1(f_1);
fclose(f_1[0]);
fclose(f_1[1]);
FILE *f_2[2][2];
fprintf(f[0][0], "testn");
f_2[0][0] = fopen("test.txt", "w");
f_2[1][1] = fopen("test_2.txt", "w");
func_2(f_2);
fclose(f_2[0][0]);
fclose(f_2[1][1]);
}

基本上,f的第一部分是工作的,但当我创建文件数组f_1或f_2时就不工作了。如何处理它们,具体写进其中一些。

真诚地,Paul

编辑:如前所述,我的最小代码没有运行,令人困惑。这是我的错,我继续尝试其他事情,忘记删除测试修改。

您只需要一个接受FILE*数组和索引的函数,而不是多个func函数。单个文件作为FILE*传递,因此文件数组作为FILE**传递。

void func(FILE** file_array, unsigned int index) {
FILE* f = file_array[index];
if (f)
{
fprintf(f, "testn");
}
}

然后调用:

FILE *files[2];
files[0] = fopen("test.txt", "w");
files[1] = fopen("test_2.txt", "w");
func(files,0);
func(files,1);
fclose(files[0]);
fclose(files[1]);

当您只有一个FILE*实例时,也可以调用func。即:

FILE* f = fopen("test.txt", "w");
func(&f, 0);

对于你的二维数组,我不确定你想要什么。但是这个:

FILE *f_2[2][2];
fprintf(f[0][0], "testn");

是未定义的行为。您正在使用未初始化的文件句柄调用fprintf

最新更新