繁体   English   中英

如何在 C 中将文本从一个文件复制到另一个文件?

[英]Ho to copy text from one file to another in C?

我正在编写一个基本程序来将文本复制到另一个文本文件。 但是在控制台 window 中输入应该从中获取文本的文件名后,程序结束并且不会 go 进一步。 我怎么解决这个问题?

#include <stdio.h>
#include <stdlib.h>

int main(void) {
    char filename1, filename2;
    FILE *infile;
    FILE *outfile;
    printf("Enter a data file name:");
    scanf("%s", filename1);
    infile = fopen("filename1", "r");
    printf("Enter a input file name:");
    scanf("%s", filename2);
    
    outfile = fopen("filename2", "w");
    if (infile == NULL || outfile == NULL) {
        printf("Problem in opening files");
        exit(0);
    }
    printf("files opened successfully");
    char characters;
    do {
        characters = getc(infile);
        fprintf(outfile,"%s", characters);
        printf("%s", characters);
    } while (!feof(infile));
    fclose(infile);
    fclose(outfile);
    return 0;
}

显示程序运行的 windows cmd 窗口

有很多问题。

char filename1, filename2;

这只允许filename1filename2保存单个字符 - 而不是 C 字符串。 您需要将 memory 保留为 char 数组。 像:

char filename1[64], filename2[64];  // Allow 63 chars for file name

然后

scanf("%s",filename1);

真的很糟糕,因为它允许用户溢出您的输入缓冲区。 考虑使用fgets或至少这样做:

scanf("%63s",filename1);  // Limit user input to 63 chars as the buffer is 64
                          // The "last" char is for the string termination

然后循环:

首先, characters应为int以便您可以检查EOF 此外,直接检查getc而不是使用feof 并且不要使用%s将单个字符打印到 output 文件 - 使用%c

int characters;
while(1) {
    characters=getc(infile);
    if (characters == EOF) break;      // Break (aka jump out of the loop) on
                                       // end-of-file or errors

    fprintf(outfile,"%c",characters);  // %c instead of %s
                                       // or use: putc(characters, outfile)
                                       // instead of fprintf
    printf("%s",characters);
}

你的程序有几个问题:

  1. 您正在使用char变量来保存文件名。 这些变量应该是char arrays 或指向某些已分配 memory 的第一个char的指针。
  2. fopen("filename2", "w")似乎是错误的。 尽管第一个参数应该是char * ,但您并不是在读/写您刚刚要求用户输入的文件。
  3. fprintf(outfile,"%s",characters) - 您正在使用%s打印字符。 这将调用UB
  4. char characters - 文件的最后一个字符, EOF字符保证适合int characters变量应声明为int ,以便它可以保存EOF字符。

这是有效的程序:

#include <stdio.h>
#include <stdlib.h> 

int main(void) {

        char filename1[10], filename2[10];
        FILE *infile;
        FILE *outfile;

        printf("Enter a data file name:");
        scanf("%s",filename1);
        infile  = fopen(filename1, "r");

        printf("Enter a input file name:");
        scanf("%s",filename2);
        outfile = fopen(filename2, "w");

        if (infile==NULL || outfile==NULL) {
                printf("Problem in opening files");
                exit(0);
        }

        printf("files opened successfully");
        int characters;
        /*do {
          characters=getc(infile);
          fprintf(outfile,"%s",characters);
          printf("%s",characters);
          } while(!feof(infile));
          */
        while ((characters = getc(infile)) != EOF) {
                fprintf(outfile, "%c", characters);
                printf("%c", characters);
        }

        fclose(infile);
        fclose(outfile);
        return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM