c strcpy文件描述符

时间:2011-01-11 13:15:52

标签: c file io strcpy

我对strcpy()函数有疑问。我想要做的是用户输入文件名,我基本打开文件,获取内容并创建文件副本。

但是,我决定进行一些错误检查,以检查内容read()是否与写入之前写入的内容相同。因此,我使用文件读取的文件大小将()内容读入动态数组,因此缓冲区是适合数据的大小。然后我想创建一个副本到另一个动态缓冲区,并使用strcmp()来查看它们是否相同,如果是,那么我将复制缓冲区写入输出文件?

这适用于某些文件,但视频文件(mpeg)等问题,打开视频文件时出现错误'无法确定流的类型',继承人的想法

char* buffer1 = malloc(filessize);
char* buffer2 = malloc(filessize);
read(file, buffer1, filesize);
strcpy(buffer2, buffer1); //copy buffer1 into buffer2
if(strcmp(buffer1, buffer2) == 0)
{
  write(outputfile, buffer2, filesize); //write copied buffer to file
}
free(buffer1); free(buffer2);

我之所以在内存中创建另一个缓冲区副本,是因为我可以比较实际的位数据,而不仅仅是大小,所以我知道正在写入的数据与正在读取的数据相同?

2 个答案:

答案 0 :(得分:6)

strcpystrcmp用于C字符串,它们以0结尾。如果您的视频文件包含值为0的任何字节,它们将在那里停止。

您应该查看memcpymemcmp,而不会将您的缓冲区解释为0终止字符串。

答案 1 :(得分:1)

你应该使用memcpy,因为strcpy只能复制到第一个'\ 0'字符。这对二进制文件很有用。真正的问题是为什么你想要在内存中复制文件的内容...你可以把原始缓冲区写到一个新文件。