Friday, August 27, 2010

УДИВЛЕНИЕ!

Открыть текстовый файл:

fsrc = fopen(argv[1],"rt");

Определить его размер:

long fsize(FILE *f)
{
long pos, end;
pos = ftell(f);
fseek(f,0,SEEK_END);
end = ftell(f);
fseek(f,pos,SEEK_SET);
return end;
}


Выделить памяти:

long src_size = fsize(fsrc);
char *buf = new char[src_size+1];

Зачитать в нее собственно текст:

fread(buf,src_size,1,fsrc);

Последний символ файла не ноль, поэтому пририсовываем к буферу ноль и дальше работаем с ним, как с длинной строчкой текста:

buf[src_size] = 0;
parser.add_source(buf);

Потом обнаруживается, что в конце буфера 304 байта мусора, и потом собственно ноль, который я туда написал. То есть текста считалось из файла на 304 байта меньше, хотя размер файла определяется верно.

Я-то знаю, почему это так.

No comments: