我想将数据从一个文件复制到另一个文件。但只有一个字节正在复制。
#include<stdio.h>
void main() {
FILE *fp1, *fp2;
char a;
fp1 = fopen("test.jpg", "r");
if (fp1 == NULL) {
puts("cannot open this file");
exit(1);
}
fp2 = fopen("test1.jpg", "w+");
if (fp2 == NULL) {
puts("Not able to open this file");
fclose(fp1);
exit(1);
}
do {
a = fgetc(fp1);
fputc(a, fp2);
} while (a != EOF);
fcloseall();
}
test.jpg 由数据 ff d8 32 86 ..... 但它只复制 ff 并从 while 循环中出来。我做错了什么吗
最佳答案
将a
声明为int
,而不是char
。
int a;
否则,第一个 0xFF
会扩展为 -1
(EOF
)。
您还应该使用 b
(表示“二进制”)打开/关闭文件:
fp1 = fopen("test.jpg", "rb");
// ...
fp2 = fopen("test1.jpg", "w+b");
并且,正如 Drew 所指出的,在写入字符之前检查EOF
:
while ((a = fgetc(fp1)) != EOF) {
fputc(a, fp2);
}
关于c - 将数据从一个文件复制到另一个文件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25139792/