C中意外的输出复制文件

Tim*_*Tim 2 c file-io

在另一个问题中,接受的答案显示了一种将文件内容读入内存的方法.

我一直在尝试使用此方法读取文本文件的内容,然后将其复制到新文件.但是,当我将缓冲区的内容写入新文件时,文件末尾总会有一些额外的垃圾.这是我的代码示例:

inputFile = fopen("D:\\input.txt", "r");
outputFile = fopen("D:\\output.txt", "w");

if(inputFile)
{
    //Get size of inputFile
    fseek(inputFile, 0, SEEK_END);
    inputFileLength = ftell(inputFile);
    fseek(inputFile, 0, SEEK_SET);

    //Allocate memory for inputBuffer   
    inputBuffer = malloc(inputFileLength);

    if(inputBuffer)
    {
        fread (inputBuffer, 1, inputFileLength, inputFile);
    }

    fclose(inputFile);

    if(inputBuffer)
    {
        fprintf(outputFile, "%s", inputBuffer);
    }

    //Cleanup
    free(inputBuffer);
    fclose(outputFile);
}
Run Code Online (Sandbox Code Playgroud)

输出文件始终包含输入文件的精确副本,但随后在末尾附加了文本"MPUTERNAM2".任何人都可以解释为什么会发生这种情况?

Cra*_*rks 7

你可能会更开心

int numBytesRead = 0;
if(inputBuffer)
{
  numBytesRead = fread (inputBuffer, 1, inputFileLength, inputFile);
}

fclose(inputFile);

if(inputBuffer)
{
  fwrite( inputBuffer, 1, numBytesRead, outputFile );
}
Run Code Online (Sandbox Code Playgroud)

它不需要以空字符结尾的字符串(因此可以在包含零的二进制数据上正常工作)