Ошибка в фреде в C - PullRequest
       1

Ошибка в фреде в C

1 голос
/ 06 февраля 2012

Я хочу прочитать текстовый файл (максимальная длина 300 МБ) и найти шаблон (максимальная длина 100) в нем.Сначала я использовал текст char [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);

Я также написал бесплатно (tBuffer);в конце моего основного ().У меня есть 2 строки в моем текстовом файле, каждая строка из 10 символов.Когда я отлаживаю программу, tSize равен 24, а результат равен 22. Итак, программа завершается.Я не могу понять, в чем проблема ?????

1 Ответ

1 голос
/ 06 февраля 2012

Когда вы открываете файл в текстовом режиме в Windows, символы, представляющие конец строки, преобразуются: последовательность CR / LF (возврат каретки / перевод строки), которая представляет конец строки, изменяется на LF.Это означает, что количество прочитанных вами байтов из файла не обязательно будет равно размеру файла.

Если вы откроете файл в двоичном режиме (fopen(filename, "rb")), такое преобразование новой строки не произойдет.,Поскольку вы имеете дело с текстовым файлом, вероятно, лучше открыть его в текстовом режиме, но разрешить считываемое количество меньше размера файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...