C中fread的错误

C中fread的错误,c,windows,string,C,Windows,String,我想读取一个文本文件(最大长度300MB)并在其中搜索一个模式(最大长度100)。起初,我使用char text[100000000]和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); p

我想读取一个文本文件(最大长度300MB)并在其中搜索一个模式(最大长度100)。起初,我使用char text[100000000]和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);

我还写了免费的(tBuffer);在我的主要()的末尾。我的文本文件中有两行,每行有10个字符。当我调试程序时,tSize是24,结果是22。因此,程序退出。我无法理解问题是什么?

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


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

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

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

尝试使用
“rb”
打开它?我想知道那里是否有换行符转换。试着用
“rb”
打开它?我想知道那里是否正在进行换行。