gpt4 book ai didi

c - C中的fread错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:03:24 25 4
gpt4 key购买 nike

我想读取一个文本文件(最大长度 300MB)并在其中搜索一个模式(最大长度 100)。起初我使用 char text[1000000000] 和 fread 来读取文本文件。但是,我发现最好使用以下代码:

tFile = fopen("d:\\text.txt","r");
if(tFile==NULL){
fputs("Text File Error",stderr);
exit(0);
}
fseek (tFile,0,SEEK_END);
tSize = ftell(tFile);
printf("%d\n",tSize);
rewind(tFile);
tBuffer = (char*) malloc (sizeof(char)*tSize);
if (pBuffer == NULL){
fputs ("Memory Error",stderr);
free (tBuffer);
exit (0);
}
tresult = fread(tBuffer,sizeof(char),tSize,tFile);
if (tresult != tSize){
fputs ("Reading Error",stderr);
free (tBuffer);
exit (0);
}
fclose(tFile);

我也写了free(tBuffer);在我的 main() 的末尾。我的文本文件中有 2 行,每行 10 个字符。当我调试程序时,tSize 为 24,result 为 22。因此,程序退出。我不明白这是什么问题?????

最佳答案

当您在 Windows 上以文本模式打开文件时,表示行尾的字符将被转换:表示行尾的 Sequence CR/LF(回车/换行)更改为 LF。这意味着您从文件中读取的字节数不一定等于文件的大小。

如果您以二进制模式打开文件 (fopen(filename, "rb")),则不会发生此类换行符转换。由于您正在处理文本文件,因此最好以文本模式打开它,但允许读取的数量小于文件大小。

关于c - C中的fread错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9159596/

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