| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > помогите ламеру :) |
| Автор: zzz 3.7.2002, 00:27 |
| народ, у меня назрел тут вопрос - "\n" - это два символа или один? |
| Автор: Nastya 3.7.2002, 07:09 |
| Один. Как в общем и \0 и другие По моему |
| Автор: Вано 3.7.2002, 07:20 |
| А откуда такой вопрос? Это в смысле тебе интересна как надо писать '/n' или "/n" т.к.символ один то надо как в первом случае. |
| Автор: podval 3.7.2002, 11:09 | ||
Нет, писать надо "\n", ибо это escape-последовательность, воспринимается, как управляющий символ. См. хелп. |
| Автор: Baa 3.7.2002, 12:36 |
| "\n" = crlf = (char)0xA, (char)0xD |
| Автор: zzz 3.7.2002, 16:37 | ||
а почему тогда вот тут: char *a = "Hello!\n" в дампе a в конце только \x0A |
| Автор: Baa 3.7.2002, 17:32 |
| Ща тож посморел, тут нету возврата коретки, тут токо перевод строки...у меня спросто были ассоциации с ассемблером, там всегда строки определялись с 0ah и 0dh на конце и посему, я считал, что \n - это именно эквивалент crlf, хотя тут это токо перевод строки. Так что вполне справедливо следующее: char Hello[8]; strcpy (Hello, "Hello!"); Hello[6] = '\n'; Hello[7] = '\0'; printf (Hello); Т.е. \n -это один символ. |
| Автор: Wowa 3.7.2002, 23:17 | ||
А есть разница? |
| Автор: Vit 4.7.2002, 03:18 |
| Есть разница - стандарт DOS/Windows 13h 10h - конец строки и перевод каретки, хотя в 99% случаев только один символ тоже воспринимается корректно. Под Linux/Unix стандарт - только 13h (черт, забыл! - может и 10h - короче один из них)... |
| Автор: Temnozor 5.7.2002, 08:34 | ||||||
| Проблема затронута довольно серьезная. Я воевал с нечто подобным, разбираться было особо некогда и оставил все как есть. Может сейчас разрешим? Есть строка в ресурснике:
Ее я выдаю в файл (создаю html-ку):
Все работает. Я бы не заметил проблемы, если бы не открыл однажды получившуюся html-ку в FrontPage. Мамочка моя! Вместо двух переходов на новую строку в редакторе FrontPage'а стало четыре, вместо одного - два. Открываю html-ку в бинарном виде, и точно:
И кто мне объяснит все это? В чем я согрешил? P.S. Может за одно подскажете можно ли покрасивее написать тоже самое вместо (CString)MAKEINTRESOURCE(IDS_P_CONTENT)? |
| Автор: Baa 5.7.2002, 12:55 |
| Ответ прост Используй функции 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); |
| Автор: Fantasist 6.7.2002, 11:45 |
| Вопрос известен. Приколов с ним всегда хватало, пока не привыкнешь. Конечно, символ '\n' один, как и просто 0D, но многие функции записи данных контролируют это дело, и считают своим долгом добавить к нему еще и символ 0A. Или наоброт... к 0А добавить 0D. А может и так и так. |
| Автор: Alex101 10.7.2002, 23:11 |
| С этим лучше не париться, а просто посмотреть, что получится... Например, попробуйте в билдере открыть в ричэдите текстовый файл ДОС. Он в конце каждой строки будет выдавать символ 0x0A По идее, "\n" - это 0x0D.... |
| Автор: a__drake 11.7.2002, 06:12 | ||
Доброе время суток! Если ещё не разобрались, то... >>По идее, "\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 |
| Ох уж эти чайники! \r=0x0A, \n=0x0D Если поток открыт в _текстовом режиме_ (а stdout именно в тесктовом режиме), то \n транслируется в \r\n. cr - возврат каретки (каретка переводится в начало _этой же_ строки) nl - переход на новую строку (в той же позиции). Если система не транслирует \n то вы можете увидеть вот такой текст. |
| Автор: crimaniak 12.7.2002, 15:29 |
| Поправка: А и Д поменять... Но это неважно |