gpt4 book ai didi

c - fread 读取超过文件末尾

转载 作者:行者123 更新时间:2023-11-30 14:59:53 24 4
gpt4 key购买 nike

我编写了一些简单的代码来读取 C 中文件的内容并将其输出到命令行,只是为了熟悉 Code::Blocks。我刚刚从我编写的另一个程序中复制了这段代码(它工作得很好)。

我打开文件,分配足够的内存来存储文件的内容,然后将文件的内容读入该内存。当我打印文件的内容时,最后出现随机垃圾。我添加了一些调试打印语句来检查文件的长度(结果为 15)以及我读入文件内容的字符串的长度(结果为 22)。我不明白为什么我读入数据的字符串比文件长?

感谢任何帮助,代码如下。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main()
{
//open a file for editing
FILE * inputFile = fopen("hexfile.txt", "rb");

//Measure the file and allocate memory
fseek(inputFile, 0, SEEK_END);
unsigned long fileSize = ftell(inputFile);
rewind(inputFile);
char *inputData = (char*)malloc(fileSize);

//Save the contents of the file to a variable
fread(inputData, sizeof(char), fileSize, inputFile);

printf("File Size: %lu \n", fileSize);
int length = strlen(inputData);
printf("String Length = %d \n", length);

printf("Contents of file: %s", inputData);

//Close files
fclose(inputFile);
return 0;
}

最佳答案

你的程序几乎是正确的。要获得有效的字符串,它必须是终止于'\0'。如果您的文件没有空字节巧合的是,那么当你的数据作为字符串读取时就没有结尾。

要解决这个问题,只需在分配内存时再添加一个空间,然后设置最后一个字节为空:

char *inputData = (char*)malloc(fileSize+1);
/* ... */
inputData[fileSize] = '\0';

关于c - fread 读取超过文件末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42461867/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com