我需要修改一个用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
。