sách gpt4 ai đã đi

c - 通过函数 : FILE* or FILE**? 的 FILE* 数组

In lại 作者:太空宇宙 更新时间:2023-11-04 08:24:15 31 4
mua khóa gpt4 Nike

我正在尝试制作一个可以同时处理多个不同文件的程序。我的想法是制作一个包含 20 个 FILE* 的数组,以便在我达到此限制时能够关闭其中一个并打开请求的新文件。 为此,我想到了一个函数,它选择一个选项并调用另一个函数来完成保存(写入)、关闭和打开的工作。 在网上搜索半周并进行一些证明后,我制作了两个似乎有效的版本:一个带有 FILE*,另一个带有 FILE**。

我的问题是:如果其中一些有我无法检测到的错误,或者在传递这两个函数时指针使用不当。

(我展示的代码先后有两个函数的两个版本。)

MyProgram() {

#include
#include
#include

/* The contents of myFile1a.dat, myFile2b.dat,... are just 5 ints. */


/* Version without pointer to pointer. */
void fReadFile(FILE* pfFile[]) {
int i = 0, j = 0;
int iNums[15] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int iNums2[15] = {5001, 5002, 5003, 5004, 5005, 2033, 2066, 2099, 2133, 2166, 3001, 3002, 3003, 3004, 3005};
char cNameFile4d[32] = "myFile4d.dat", cNameFile5e[32] = "myFile5e.dat";
char cNameFile6f[32] = "myFile6f.dat";
char cNameFile[32] = {" "};
int iResultFclose = 0;

for(i=0; i<5; i++) {
fread(&iNums[i], 4, 1, pfFile[0]);
printf("\n%d",iNums[i]);
}
for(i=5; i<10; i++) {
fread(&iNums[i], 4, 1, pfFile[1]);
printf("\n%d",iNums[i]);
}
for(i=10; i<15; i++) {
fread(&iNums[i], 4, 1, pfFile[2]);
printf("\n%d", iNums[i]);
}

iResultFclose = fclose(pfFile[0]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose(pfFile[1]);
if (iResultFclose != 0)
puts("Error closing the file 1.");
iResultFclose = fclose(pfFile[2]);
if (iResultFclose != 0)
puts("Error closing the file 2.");

strcpy(cNameFile, cNameFile4d);
pfFile[0] = fopen(cNameFile, "wb");
for(i=0; i<5; i++)
fwrite(&iNums2[i], 4, 1, pfFile[0]);
strcpy(cNameFile, cNameFile5e);
pfFile[1] = fopen(cNameFile, "wb");
for(i=5; i<10; i++)
fwrite(&iNums2[i], 4, 1, pfFile[1]);
strcpy(cNameFile, cNameFile6f);
pfFile[2] = fopen(cNameFile, "wb");
for(i=10; i<15; i++)
fwrite(&iNums2[i], 4, 1, pfFile[2]);

iResultFclose = fclose(pfFile[0]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose(pfFile[1]);
if (iResultFclose != 0)
puts("Error closing the file 1.");
iResultFclose = fclose(pfFile[2]);
if (iResultFclose != 0)
puts("Error closing the file 2.");

strcpy(cNameFile, cNameFile4d);
pfFile[0] = fopen(cNameFile, "rb");
strcpy(cNameFile, cNameFile5e);
pfFile[1] = fopen(cNameFile, "rb");
strcpy(cNameFile, cNameFile6f);
pfFile[2] = fopen(cNameFile, "rb");

for(i=0; i<5; i++) {
fread(&iNums[i], 4, 1, pfFile[0]);
printf("\n%d",iNums[i]);
}
for(i=5; i<10; i++) {
fread(&iNums[i], 4, 1, pfFile[1]);
printf("\n%d",iNums[i]);
}
for(i=10; i<15; i++) {
fread(&iNums[i], 4, 1, pfFile[2]);
printf("\n%d", iNums[i]);
}

iResultFclose = fclose(pfFile[0]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose(pfFile[1]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose(pfFile[2]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
}

/* Version with pointer to pointer. */
void fReadFile(FILE** pfFile[]) {
int i = 0, j = 0;

int iNums[15] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0};
int iNums2[15] = {5001, 5002, 5003, 5004, 5005, 2033, 2066, 2099, 2133, 2166, 3001, 3002, 3003, 3004, 3005};
char cNameFile4d[32] = "myFile4d.dat", cNameFile5e[32] = "myFile5e.dat", cNameFile6f[32] = "myFile6f.dat";
char cNameFile[32] = {" "};
int iResultFclose = 0;

for(i=0; i<5; i++) {
fread(&iNums[i], 4, 1, (*pfFile)[0]);
printf("\n%d",iNums[i]);
}
for(i=5; i<10; i++) {
fread(&iNums[i], 4, 1, (*pfFile)[1]);
printf("\n%d",iNums[i]);
}
for(i=10; i<15; i++) {
fread(&iNums[i], 4, 1, (*pfFile)[2]);
printf("\n%d", iNums[i]);
}

iResultFclose = fclose((*pfFile)[0]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose((*pfFile)[1]);
if (iResultFclose != 0)
puts("Error closing the file 1.");
iResultFclose = fclose((*pfFile)[2]);
if (iResultFclose != 0)
puts("Error closing the file 2.");

strcpy(cNameFile, cNameFile4d);
(*pfFile)[0] = fopen(cNameFile, "wb");
for(i=0; i<5; i++)
fwrite(&iNums2[i], 4, 1, (*pfFile)[0]);
strcpy(cNameFile, cNameFile5e);
(*pfFile)[1] = fopen(cNameFile, "wb");
for(i=5; i<10; i++)
fwrite(&iNums2[i], 4, 1, (*pfFile)[1]);
strcpy(cNameFile, cNameFile6f);
(*pfFile)[2] = fopen(cNameFile, "wb");
for(i=10; i<15; i++)
fwrite(&iNums2[i], 4, 1, (*pfFile)[2]);

iResultFclose = fclose((*pfFile)[0]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose((*pfFile)[1]);
if (iResultFclose != 0)
puts("Error closing the file 1.");
iResultFclose = fclose((*pfFile)[2]);
if (iResultFclose != 0)
puts("Error closing the file 2.");

strcpy(cNameFile, cNameFile4d);
(*pfFile)[0] = fopen(cNameFile, "rb");
strcpy(cNameFile, cNameFile5e);
(*pfFile)[1] = fopen(cNameFile, "rb");
strcpy(cNameFile, cNameFile6f);
(*pfFile)[2] = fopen(cNameFile, "rb");

for(i=0; i<5; i++) {
fread(&iNums[i], 4, 1, (*pfFile)[0]);
printf("\n%d",iNums[i]);
}
for(i=5; i<10; i++) {
fread(&iNums[i], 4, 1, (*pfFile)[1]);
printf("\n%d",iNums[i]);
}
for(i=10; i<15; i++) {
fread(&iNums[i], 4, 1, (*pfFile)[2]);
printf("\n%d", iNums[i]);
}

iResultFclose = fclose((*pfFile)[0]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose((*pfFile)[1]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose((*pfFile)[2]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
}

/* Version without "&" in the caller. */
void fOptions(FILE* pfFileOpc[], int option) {
int i = 0;
switch (option)
{
case 1: {fReadFile(pfFileOpc); break;}
case 2: {printf("\nHello!\n"); break;}
default: break;
}
}

/* Version with "&" in the caller. */
void fOptions(FILE* pfFileOpc[], int option) {
int i = 0;
switch (option)
{
case 1: {fReadFile(&pfFileOpc); break;}
case 2: {printf("\nHello!\n"); break;}
default: break;
}
}

int chính() {
FILE *pFile[3];
int i = 0, j = 0, option = 0, iResultFclose = 0;

char cNameFile[32] = {" "};
char cNameFile1a[32] = "myFile1a.dat", cNameFile2b[32] = "myFile2b.dat";
char cNameFile3c[32] = "myFile3c.dat", cNameFile4d[32] = "myFile4d.dat";
char cNameFile5e[32] = "myFile5e.dat", cNameFile6f[32] = "myFile6f.dat";

int iNums[15] = {2001, 2002, 2003, 2004, 2005, 2033, 2066, 2099, 2133, 2166, 3001, 3002, 3003, 3004, 3005};
int iNums2[15] = {5001, 5002, 5003, 5004, 5005, 2033, 2066, 2099, 2133, 2166, 3001, 3002, 3003, 3004, 3005};

strcpy(cNameFile, cNameFile1a);
pFile[0] = fopen(cNameFile, "rb");
if (!pFile[0])
puts("Error opening the file1a");
strcpy(cNameFile, cNameFile2b);
pFile[1] = fopen(cNameFile, "rb");
if (!pFile[1])
puts("Error opening the file2b");
strcpy(cNameFile, cNameFile3c);
pFile[2] = fopen(cNameFile, "rb");
if (!pFile[2])
puts("Error opening the file3c");

printf("\nWrite an option: \n");
scanf("%d", &option);
fOptions(pFile, option);

puts("\n\nAnd we foooooolow....... \n\n");

strcpy(cNameFile, cNameFile1a);
pFile[0] = fopen(cNameFile, "rb");
if (!pFile[0])
puts("Error opening the file1a");
strcpy(cNameFile, cNameFile2b);
pFile[1] = fopen(cNameFile, "rb");
if (!pFile[1])
puts("Error opening the file2b");
strcpy(cNameFile, cNameFile3c);
pFile[2] = fopen(cNameFile, "rb");
if (!pFile[2])
puts("Error opening the file3c");

for(i=0; i<5; i++) {
fread(&iNums[i], 4, 1, pFile[0]);
printf("\n%d",iNums[i]);
}
for(i=5; i<10; i++) {
fread(&iNums[i], 4, 1, pFile[1]);
printf("\n%d",iNums[i]);
}
for(i=10; i<15; i++) {
fread(&iNums[i], 4, 1, pFile[2]);
printf("\n%d", iNums[i]);
}

iResultFclose = fclose(pFile[0]);
if (iResultFclose != 0)
puts("Error closing the file 0.");
iResultFclose = fclose(pFile[1]);
if (iResultFclose != 0)
puts("Error closing the file 1.");
iResultFclose = fclose(pFile[2]);
if (iResultFclose != 0)
puts("Error closing the file 2.");

trả về 0;
}

Cảm ơn bạn rất nhiều.

1 Câu trả lời

单个文件句柄是指向FILE 的指针,即FILE *。由于您需要这些 FILE * 元素的数组,因此指向该数组的指针是 FILE **arr,相当于 FILE *arr[] 当用作函数的参数类型时。

关于c - 通过函数 : FILE* or FILE**? 的 FILE* 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31570409/

31 4 0
太空宇宙
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com