我有file1.txt
git clone --depth=1 <remote_repo_url>
和file2.txt
This is my file
我希望使用This is my second file
memcpy
} 我不知道为什么,但是当我运行这个时,我得到了带有大量随机符号的file2.txt。为什么?我做错了什么?
编辑: 我的完整代码
int main( int argc, char * argv[] ){
int d;
int d2;
int p;
FILE *f1;
FILE *f2;
if(argc == 3){
f1 = fopen(argv[1], "r+");
f2 = fopen(argv[2], "r+");
d = da_open(argv[1]);
d2 = da_open2(argv[2]);
p = da_cp(f2, f1, 10);
da_map(d, 10);
da_map(d2, 10);
close(p);
//closef(d2);
}
答案 0 :(得分:1)
memcpy
对文件描述符不起作用,您可以将file1的内容存储在字符数组中(使用fgets
或fread
),然后复制到file2(使用fputs
或fwrite
)
另请注意,您需要使用fclose()
代替close()
fopen()
答案 1 :(得分:1)
d
和d2
不是文件,它们只是文件描述符(存储有关文件及其输入/输出状态的信息)。
如果要从1个文件复制到另一个文件,则必须先读取第一个文件。这就是你如何做到这一点的例子:
#include <stdio.h>
#include <stdlib.h>
// Open the first text file
FILE *f = fopen("textfile1.txt", "rb");
fseek(f, 0, SEEK_END);
long fsize = ftell(f);
fseek(f, 0, SEEK_SET);
// Read it into buffer
char *buffer = malloc(fsize + 1);
fread(string, fsize, 1, f);
fclose(f);
buffer[fsize] = 0;
// Now write the string buffer into your second text file
FILE *f2 = fopen ("textfile2", "wb");
fwrite (buffer, sizeof(char), sizeof(buffer), f2);
fclose (f2);
因此,正如您所见,memcpy
只能在RAM中执行内存,并且与硬盘中的文件无关(除非您将其读入RAM内存)