[英]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;
}
有很多问题。
char filename1, filename2;
这只允许filename1
和filename2
保存单个字符 - 而不是 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);
}
你的程序有几个问题:
char
变量来保存文件名。 这些变量应该是char
arrays 或指向某些已分配 memory 的第一个char
的指针。fopen("filename2", "w")
似乎是错误的。 尽管第一个参数应该是char *
,但您并不是在读/写您刚刚要求用户输入的文件。fprintf(outfile,"%s",characters)
- 您正在使用%s
打印字符。 这将调用UB 。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.