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