我正在尝试 C 中的一些文件操作技术,因此我编写了一个简单的程序,它将文件作为输入并将其复制到一个空文件中。我在“二进制”和“读取”模式下使用 fopen() 打开要读取的文件,使用 fgetc() 逐个读取所有字节,并将它们写入我想要写入的文件中,该文件在“写入”和“读取”模式下打开二进制”模式。当复制操作完成(EOF)时,我对两个文件都调用了 fclose() 并终止了程序。
这就是问题所在:对于文本文件,一切都很好,但是当我尝试以不同格式复制文件时,例如 pdf 或 jpeg,我会遇到分段错误。由于代码真的很短很简单,我怀疑这个问题是由于我对用 C 读写这些文件格式缺乏了解造成的,而不是代码中的错误。
欢迎任何建议和想法,如果您怀疑我可能对代码做错了什么,我也可以发布它。
编辑:好的,所以我可能搞砸了代码,这里是:
#include <stdio.h>
#include <stdlib.h>
#define MAXCHAR 10000000
int main( int argc, char** argv)
{
if( argc != 3)
{
printf( "usage: fileexer1 <read_pathname> <write_pathname>");
exit( 1);
}
FILE* file_read;
FILE* file_write;
int nextChar;
char readBuffer[MAXCHAR];
int valid = 0;
// These hold the path addresses to the files to be read and written
char* read_file_path = argv[1];
char* write_file_path = argv[2];
// The file to be read is opened in 'read' and 'binary' modes
file_read = fopen( read_file_path, "rb");
if( !file_read)
{
perror( "File cannot be opened for reading");
exit( 1);
}
// The file to be written into is opened in 'write' and 'binary' modes
file_write = fopen( write_file_path, "wb");
if( !file_write)
{
perror( "File cannot be opened for writing");
exit( 1);
}
nextChar = fgetc( file_read);
while( nextChar != EOF)
{
readBuffer[valid] = (char) nextChar;
valid++;
nextChar = fgetc( file_read);
}
int i;
for( i = 0; i < valid; i++)
{
fputc( readBuffer[i], file_write);
}
fclose( file_read);
fclose( file_write);
return 0;
}