Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Лишний байт в файле после записи 
V
    Опции темы
Ofer
Дата 12.4.2009, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Всех с днем Космонавтики!!!!
А теперь вопрос smile
Записываю в файл посимвольно числовые данные
Код

//---------------------------------------------------------------------------
#include <stdio.h>
#pragma hdrstop

//---------------------------------------------------------------------------

#pragma argsused
int main()
{
    FILE *f;
    char c[128];
    for(int i = 0;i < 128;i++)
     c[i] = i;
    f = fopen("D:\\outfile","w");
    for(int i = 0;i < 128;i++)
     fputc(c[i],f);
    fclose(f);
    return 0;
}
//---------------------------------------------------------------------------

По идее, должен иметь на выходе фалй "outfile" размером 128байт. Но получаю 129 байт. Просмтриваю его и вижу
Код

00 01 02 03 04 05 06 07 08 09 [color=red]0D[/color] 0A 0B 0C 0D 0E 0F 10 11 12 13 14 15 16 17 18 19 1A 1B 1C 1D 1E 1F 20 21 22 23 24 25 26 27 28 29 2A 2B 2C 2D 2E 2F 30 31 32 33 34 35 36 37 38 39 3A 3B 3C 3D 3E 3F 40 41 42 43 44 45 46 47 48 49 4A 4B 4C 4D 4E 4F 50 51 52 53 54 55 56 57 58 59 5A 5B 5C 5D 5E 5F 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F

Спрашивается: откуда взялся этот злополучный 0D?
З.Ы. Другие эксперименты показали, что он появляется исключительно перед числом 0A. То бишь перед ASCII символом '\n'
PM MAIL ICQ   Вверх
zim22
Дата 12.4.2009, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


depict1
****


Профиль
Группа: Завсегдатай
Сообщений: 2682
Регистрация: 15.1.2009
Где: Украина

Репутация: 24
Всего: 69



0D 0A - это так в ассемблере возврат каретки и перевод на новую строку обозначается.

Добавлено через 1 минуту и 29 секунд
Цитата(Ofer @  12.4.2009,  15:23 Найти цитируемый пост)
То бишь перед ASCII символом '\n'

\r\n в файле было


--------------------
PM MAIL   Вверх
Ofer
Дата 12.4.2009, 15:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Как в таком случае сделать, чтоб в файл записывалось лишь число 0A?
PM MAIL ICQ   Вверх
GoldFinch
Дата 12.4.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Цитата(zim22 @  12.4.2009,  16:32 Найти цитируемый пост)
0D 0A - это так в ассемблере

он так везде обозначается %)
PM MAIL ICQ   Вверх
Soah
Дата 12.4.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 512
Регистрация: 18.2.2009

Репутация: нет
Всего: 54



Код

    f = fopen("D:\\outfile","wb");

?
PM MAIL   Вверх
Ofer
Дата 12.4.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 293
Регистрация: 15.10.2006
Где: КривбаСС

Репутация: нет
Всего: 5



Soah, премного благодарен!!!
PM MAIL ICQ   Вверх
J0ker
Дата 13.4.2009, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(zim22 @  12.4.2009,  15:32 Найти цитируемый пост)
0D 0A - это так в ассемблере возврат каретки и перевод на новую строку обозначается.

при чем тут ассемблер
это так конец строки в винде обозначается
при использовании функций ввода/вывода все "\n" транслируются в "\r\n" и наоборот
что-бы избежать этого надо открывать файл в бинарном режиме



--------------------
user posted image
PM MAIL   Вверх
GoldFinch
Дата 13.4.2009, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Завсегдатай
Сообщений: 2141
Регистрация: 30.11.2008

Репутация: 15
Всего: 26



Цитата(J0ker @  13.4.2009,  01:25 Найти цитируемый пост)
это так конец строки в винде обозначается

в DOS было тоже самое
это стандартные управляющие ascii коды, поидее они в любой системе должны быть такими же
PM MAIL ICQ   Вверх
J0ker
Дата 13.4.2009, 03:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(GoldFinch @ 13.4.2009,  00:39)
Цитата(J0ker @  13.4.2009,  01:25 Найти цитируемый пост)
это так конец строки в винде обозначается

в DOS было тоже самое
это стандартные управляющие ascii коды, поидее они в любой системе должны быть такими же

ну раз в винде то дос подразумевается
по идее должно быть так, как было сделано изначально
\r - это возврат каретки - в юниксе \n подразумевал переход на первую позицию следующей строки - т.е. конец строки только \n - все остальное от лукагого


Это сообщение отредактировал(а) J0ker - 13.4.2009, 03:57


--------------------
user posted image
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0993 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.