![]() |
|
Модераторы: bsa |
![]()
|
|
| btrfly |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.4.2008 Репутация: нет Всего: нет |
Если ошибся разделом,то извините
Есть строка в кодировке windows-1251. Если важно,откуда она берется,то: Получаю строку с сервера http://mrim.mail.ru:2042 через сокеты. Строка- ip:port в текстовом формате. Например: 194.186.55.17:2041 Так вот. В конец строки лезут всякие левые символы,которых там быть не должно. Ноль в конце строки не помогает,точнее помогает,но не совсем. Если например строка-
то все места(не знаю как правильно назвать)свободные от строки заполняются всякой ахинеей. Ну всмысле, 194.186.55.17:2041 занимает 19 символов,остальные 105 будут вида ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠ ╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠╠░╕↓. Сиволов 116,вместо 105 ожидаемых Если в конец строки поставить '\0',то в консоли все будет нормально отображаться, но если сделать так:
то в самом окне будет нормально отображаться,а в заголовке сообщения в конце строки будет один квадратик Как сделать,чтобы все нормально было? |
||||
|
|||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
Попробуй просто с отладчике посмотреть, что за символы в конце строки. Скорее всего, там символ конца строки ('\n'), который тебе надо было просто заменить на '\0'.
|
|||
|
||||
| rrrFer |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
у меня летом что то похожее было, попробуй не использовать массив вообще - читай все 124 символа в одну символьную переменную, странно, но у меня работало, и проблема с messagebox тоже пропала...
|
|||
|
||||
| btrfly |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.4.2008 Репутация: нет Всего: нет |
С отладчиком не дружу,поэтому вручную нашел:
Символ есть Только-Позиция:18. Почему 18,если строка занимает 19 символов,соответственно ipAddr[18]-последняя цифра порта, а там оказывается символ конца строки? зы. спс,все заработало.Только у меня еще пару вопросов будет попозже
эээ... как в одну переменную размером один байт запехать 19 байт Это сообщение отредактировал(а) btrfly - 18.5.2008, 18:27 |
||||||
|
|||||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
btrfly, по поводу 18 и 19. Тебе сервер присылает данные объемом 19 байт. В их число входит символ конца строки ('\n'). Тебе он не нужен, поэтому для тебя полезный объем - 18 байт. Значит по индексу "количество байт в строке" (почему так? напиши ряд цифр от 0 до 9 и посчитай их количество) тебе нужно прописать символ '\0'.
|
|||
|
||||
| rrrFer |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 11.5.2008 Где: Красноярск Репутация: 0 Всего: 1 |
вот мы всей группой думали, но оно работает...му так и не поняли почему
ну да читали AnsiNext и AnsiPrev, однако, все равно не понятно как оно хранится, прдположение есть что записывается 1 символ, и к нему есть доступ, и ОС запрещает доступ к нему другим приложениям, а остальные символы записываются однако к рессурсам данного приложения не относятся, т.е любое приложение может их перезаписать или прочитать, не хорошо... Это сообщение отредактировал(а) rrrFer - 18.5.2008, 19:00 |
||||
|
|||||
| btrfly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.4.2008 Репутация: нет Всего: нет |
bsa,
Я когда считал,сколько символов в строке 194.186.55.17:2041,у меня всегда получалось 19 Этот ноль никак не будет мешать,когда я разделю строку с помощью strtok() на айпи и порт,и буду использовать значения для коннекта? И еще.Для сервера,строка это- строка в кодировке windows-1251 без завершающего нуля. Это надо будет каждый раз при приеме/отправке присоединять\отрезать этот ноль? Маленько не по теме: Так как пишу все на wxWidgets(учусь по-крайней мере), сборка юникод.При конвертации в win-1251 и обратно никаких проблем не будет возникать по поводу этого нуля? |
|||
|
||||
| bsa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 9185 Регистрация: 6.4.2006 Где: Москва, Россия Репутация: 85 Всего: 196 |
btrfly, почитай пожалуйста учебники по Си. В частности, про строки и способ их хранения в памяти. Там есть все ответы.
От себя могу сказать, что '\0' - это символ конца строки в программе (т.е. все функции работают со строками пока не встретят его), а '\n' символ конца строки в многострочном тексте (т.е. он означает, что следующие за ним символы нужно отображать на новой строке), в т.ч. и в файлах. |
|||
|
||||
| btrfly |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 6.4.2008 Репутация: нет Всего: нет |
Все,понял,пошел читать
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |