-
Мозг уже взрывается. FILE* File = fopen(FileName.c_str(),"r");
fseek(File,0,SEEK_END);
int Size = ftell(File);
fseek(File,0,SEEK_SET);
char* Code = new char[Size+1];
fread(&Code[0],1,Size,File);
Code[Size] = '\0';
fclose(File); В итоге Code содержит около 20 символов H(в дебаге все заполняется H, чтобы неверные данные были сразу видны). Size имеет верное значение, совпадает с показаниями проводника и Notepad++. Откуда берутся два десятка лишних символов???
-
хм... в файле 28 строк... при этом лишних символов 27... это что перевод строки чтоли влияет????
-
и как от этого избавится??
-
> это что перевод строки чтоли влияет????
угу
FILE* File = fopen(FileName.c_str(),"rb");
> fread(&Code[0],1,Size,File);
fread(Code,1,Size,File);
любите ман - источник знаний
-
> FILE* File = fopen(FileName.c_str(),"rb");
Спасибо.
> fread(Code,1,Size,File);
и чем отличается?
-
@!!ex © (13.02.09 23:45)
Страуструп ругался бы на вас. Страуструп категорически рекомендует использовать для ввода/вывода в С++ потоковые классы (в данном случае ifstream). Ну а про приведение разделителей строк (будь то \r\n \n\r или \n, в зависимости от операционной системы) к \n в текстовом режиме вы то уж должны знать?
-
> [5] benito (14.02.09 09:43)
Да мне вобщем то по барабану на что ругается Страустрап, у меня вообще свои классы для работы с файлами. Поэтому при том что давно пишу на С++, никогда раньше не приходилось использовать FILE. Про приведение знал, про то, что r - это оказывается текстовый режим - не знал.
-
> [5] benito (14.02.09 09:43)
Вообще странный подход, создаем инстурмент для работы, а потом категорически не рекомендуем его использовать. Логика где?
-
@!!ex © (14.02.09 09:53) [7]
>Логика где?
FILE - это наследие C. Потоковые классы, в целом, рекомендуется использовать потому, что они обеспечивают типобезопасность, автоматическое освобождение ресурсов при выбросе исключений, возможность читать юникод-строки. То есть, потоковые классы это стиль C++, FILE - это стиль C. Учите матчасть.
-
>Да мне вобщем то по барабану на что ругается Страустрап, у меня вообще свои классы для работы с файлами.
Не от того ли иной российский код так сильно напоминает индийский?
-
> [8] benito (14.02.09 10:07)
Спасибо за дельный совет. ;)
> [9] Lavrentiev (14.02.09 10:19)
А вы индийский код видели, или просто умную вещь повторяете? Что-то мне подсказывает, что не видели.
-
> [8] benito (14.02.09 10:07) > FILE - это наследие C.
C++ язык не связанный с С. Зачем это наследие? Лишний костыль.
-
> > fread(Code,1,Size,File); > > и чем отличается?
меньше букав писать и меньше шанс допустить ошибку
> C++ язык не связанный с С. Зачем это наследие? Лишний костыль.
наследие - мегатонны написанного на си кода за 2 десятка лет скажи, ты откажешься?
-
> wicked © (14.02.09 22:59) [12] > наследие - мегатонны написанного на си кода за 2 десятка > лет > скажи, ты откажешься?
Ну тут Вы неправы. С++ не является надмножеством С, так что для него свой компилятор, для С++ - свой. На самом деле (так сам Страуструп писал в "Дизайне и эволюции С++") он выбрал С потому что это был популярный язык и его "наследие" в С++ обеспечило то, что С++ не стал мертворожденным проектом, а привлек внимание программистов.
|