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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> помогите ламеру :) 
:(
    Опции темы
zzz
Дата 3.7.2002, 00:27 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











народ, у меня назрел тут вопрос - "\n" - это два символа или один?
  Вверх
Nastya
Дата 3.7.2002, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 27.3.2002
Где: Мариуполь

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



Один. Как в общем и \0 и другие

По моему


--------------------
Что бы понять рекурсию, надо понять рекурсию

"Профессионал - это человек сделавший все возможные ошибки в очень узкой области". Н.Бор
PM MAIL   Вверх
Вано
Дата 3.7.2002, 07:20 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











А откуда такой вопрос? Это в смысле тебе интересна как надо писать
'/n'  или "/n" т.к.символ один то надо как в первом случае.
  Вверх
podval
Дата 3.7.2002, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Где я? Кто я?
****


Профиль
Группа: Экс. модератор
Сообщений: 3094
Регистрация: 25.3.2002
Где: СПб

Репутация: 1
Всего: 62



Цитата(Guest @ 03.7.2002, 08:20)
А откуда такой вопрос? Это в смысле тебе интересна как надо писать
'/n'  или "/n" т.к.символ один то надо как в первом случае.

Нет, писать надо "\n", ибо это escape-последовательность, воспринимается, как управляющий символ. См. хелп.
PM WWW ICQ   Вверх
Baa
Дата 3.7.2002, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



"\n" = crlf = (char)0xA, (char)0xD


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
zzz
Дата 3.7.2002, 16:37 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Baa @ 03.7.2002, 13:36)
"\n" = crlf = (char)0xA, (char)0xD

а почему тогда вот тут:
char *a = "Hello!\n"
в дампе a в конце только \x0A ??? а \x0D где???
  Вверх
Baa
Дата 3.7.2002, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Ща тож посморел, тут нету возврата коретки, тут токо перевод строки...у меня спросто были ассоциации с ассемблером, там всегда строки определялись с 0ah и 0dh на конце и посему, я считал, что \n - это именно эквивалент crlf, хотя тут это токо перевод строки.
Так что вполне справедливо следующее:
       char Hello[8];
strcpy (Hello, "Hello!");
Hello[6] = '\n';
Hello[7] = '\0';
printf (Hello);
Т.е. \n -это один символ.


--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Wowa
Дата 3.7.2002, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Цитата(Baa @ 03.7.2002, 16:32)
тут нету возврата коретки, тут токо перевод строки...

А есть разница?  :hehe
PM WWW   Вверх
Vit
Дата 4.7.2002, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

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



Есть разница - стандарт DOS/Windows 13h 10h - конец строки и перевод каретки, хотя в 99% случаев только один символ тоже воспринимается корректно. Под Linux/Unix стандарт  - только 13h (черт, забыл! - может и 10h - короче один из них)...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Temnozor
Дата 5.7.2002, 08:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 134
Регистрация: 27.6.2002
Где: Тюмень

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



Проблема затронута довольно серьезная. Я воевал с нечто подобным, разбираться было особо некогда и оставил все как есть. Может сейчас разрешим?
Есть строка в ресурснике:
Код

STRINGTABLE DISCARDABLE
BEGIN
   IDS_P_CONTENT              "<html>\n\n<head>\n<meta http и так далее"
END

Ее я выдаю в файл (создаю html-ку):
Код

FILE* file = fopen(filename, "w");
fputs((CString)MAKEINTRESOURCE(IDS_P_CONTENT), file);

Все работает. Я бы не заметил проблемы, если бы не открыл однажды получившуюся html-ку в FrontPage. Мамочка моя! Вместо двух переходов на новую строку в редакторе FrontPage'а стало четыре, вместо одного - два.
Открываю html-ку в бинарном виде, и точно:
Код
3C 68 74 6D 6C 3E 0D 0D 0A 0D 0D 0A 3C 68 65 61 64 3E 0D 0D 0A 3C 6D ...

И кто мне объяснит все это? В чем я согрешил?
P.S. Может за одно подскажете можно ли покрасивее написать тоже самое вместо (CString)MAKEINTRESOURCE(IDS_P_CONTENT)?
--------------------
Take a ride on, ride on, on your rotting horse on that deadly ground Take a ride, ride on, on your rotting horse with a pounding sound.
PM   Вверх
Baa
Дата 5.7.2002, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Экс. модератор
Сообщений: 2639
Регистрация: 12.4.2002
Где: Москва

Репутация: 8
Всего: 12



Ответ прост :) он исходит из кода. В своем коде ты использовал функции fputs и т.д. Они используют старый стандарт(DOS), в котором \n определен как 0Ah+0Dh
Используй функции Windows и все будет ок ;)
HANDLE hFile = CreateFile ("c:\\test.TxT",
GENERIC_WRITE,
NULL,
NULL,
CREATE_NEW,
FILE_ATTRIBUTE_NORMAL,
NULL);
char* pszBuffer = new char [0xFF];
memset (pszBuffer, 0, 0xFF);
LoadString (theApp.m_hInstance, IDS_STRING102, pszBuffer, 0xFF);
DWORD dwBytesWritten = 0;

WriteFile (hFile, pszBuffer, strlen(pszBuffer), &dwBytesWritten, NULL);
CloseHandle (hFile);




--------------------
"Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande
PM ICQ   Вверх
Fantasist
Дата 6.7.2002, 11:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй
***


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

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



Вопрос известен. Приколов с ним всегда хватало, пока не привыкнешь.
Конечно, символ '\n' один, как и просто 0D, но многие функции записи данных контролируют это дело, и считают своим долгом добавить к нему еще и символ 0A. Или наоброт... к 0А добавить 0D. А может и так и так.


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


Опытный
**


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

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



С этим лучше не париться, а просто посмотреть, что получится...
Например, попробуйте в билдере открыть в ричэдите текстовый файл ДОС.
Он в конце каждой строки будет выдавать символ 0x0A
По идее, "\n" - это 0x0D....


--------------------
С уважением, А. Фролов.
PM MAIL ICQ   Вверх
a__drake
Дата 11.7.2002, 06:12 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(Alex101 @ 11.7.2002, 00:11)
С этим лучше не париться, а просто посмотреть, что получится...
Например, попробуйте в билдере открыть в ричэдите текстовый файл ДОС.
Он в конце каждой строки будет выдавать символ 0x0A
По идее, "\n" - это 0x0D....

Доброе время суток!

Если ещё не разобрались, то...

>>По идее, "\n" - это 0x0D....

\n == 0x0A
\r == 0x0D

функции printf/fprintf/puts/fputs автотматически заменяют \n на последовательность \r\n (это не компилятор делает!)
В Досе конец строки обозначается _двумя_ символами, а именно \r\n
BTW, функции cprintf/cputs (кто помнит turbo-C для ДОС? ;-) ) этого не делают.
Что же качается разницы м/д '\n' и "\n" -- первое имеет тип char, второе char[2] (в конце ещё '\0' добавляется)

Всего наилучшего!

ЗЫ. В Унихе функция printf "\n" на "\r\n" не меняет. К чему бы это? ;-)
  Вверх
crimaniak
Дата 12.7.2002, 15:24 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Ох уж эти чайники!  :)

\r=0x0A, \n=0x0D

Если поток открыт в _текстовом режиме_ (а stdout именно в тесктовом режиме), то \n транслируется в \r\n.

cr - возврат каретки (каретка переводится в начало _этой же_ строки)
nl - переход на новую строку (в той же позиции).


Если система
            не транслирует \n
                              то вы можете увидеть
                                                   вот такой текст.
  Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.0860 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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