在另一个问题中,接受的答案显示了一种将文件内容读入内存的方法.
我一直在尝试使用此方法读取文本文件的内容,然后将其复制到新文件.但是,当我将缓冲区的内容写入新文件时,文件末尾总会有一些额外的垃圾.这是我的代码示例:
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".任何人都可以解释为什么会发生这种情况?
你可能会更开心
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)
它不需要以空字符结尾的字符串(因此可以在包含零的二进制数据上正常工作)