【问题标题】:How to write data to multiple files using arrays of pointers of file in C?如何使用C中的文件指针数组将数据写入多个文件?
【发布时间】:2019-09-16 18:36:28
【问题描述】:

这是我目前写的代码

#include <stdio.h>
#include <string.h>
#include <stdlib.h> // For exit() 

int main() 
{ 
    FILE *fptr1, *fptr2; 
    char filename[100], c;
    char quit[4] = "exit";
    // char *filearray[100];
    char filearray[100][14];
    FILE **originalfilearray;
    int counter = 0;


    //Copy part
    while(1){
        printf("Enter the filename to open for reading \n"); 
        scanf("%s", filename);

        fptr1 = fopen(filename, "r"); 
        if (fptr1 == NULL) 
        {   
            break;

            printf("Cannot open file %s \n", filename); 
            exit(0); 
        }

        strcpy(filearray[counter], filename);
        originalfilearray[counter] = fptr1;
        counter+=1;
    }

    //Paste part
    for (int i = 0; i < counter; i++)
    {
        printf("Enter the filename to open for writing for file %s\n", filearray[i]); 
        scanf("%s", filename);

        fptr2 = fopen(filename, "w");

        // Read contents from file 
        c = fgetc(fptr2);
        while (c != EOF)
        {
            fputc(c, fptr2);
            c = fgetc(originalfilearray[i]); 
        }
        printf("\nContents copied to %s\n", filename); 
    }
}

当我运行创建文件但没有粘贴内容的粘贴代码时出现问题。

我已经尝试阅读许多关于文件指针数组的文章。有些人建议使用单指针创建 originalfilearray 变量,有些则使用双指针。

我猜主要的问题是复制部分。

有人可以帮我解决我需要在 originalfilearray 变量中复制多个文件的数据的部分

谢谢

【问题讨论】:

  • 一些观察,1) FILE **originalfilearray; 没有为其分配内存,也许它应该是FILE *originalfilearray[14]; 尽管structs 的数组通常比单独的数组更好。 2)char c 应该是int c。 3)char quit[4] = "exit"(您不使用)缺少字符串终止符。 4) c = fgetc(fptr2); 不正确 - 那是您正在写入的文件。
  • ...因为您首先尝试从输出文件中读取,所以循环 while (c != EOF) 将永远不会迭代。
  • 您能否提及我应该为读取输入文件并将其粘贴到输出文件中所做的更改?

标签: c arrays file pointers


【解决方案1】:

除了没有为 originalfilearray 分配内存,其他用户解释过,这里有些事情你做错了

c = fgetc(fptr2);

您正试图从您刚刚打开的空文件中获取字符

fptr2 = fopen(filename, "w");

您应该做的是启动文件指针fptr 并打开

FILE *fptr=fopen(filearray[i], "r");

然后使用

将内容复制到其中
while ((c = fgetc(fptr))!= EOF)
        {
            fputc(c, fptr2);
        }

【讨论】:

    猜你喜欢
    • 2011-05-20
    • 1970-01-01
    • 2018-10-05
    • 1970-01-01
    • 2016-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多