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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите разбить строку 
:(
    Опции темы
Sollo
Дата 10.2.2006, 17:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня есть такая проблема ... я читаю из сокета в буфер после чего мне нужно по двое точию разбить содержимое буфера в две переменные. и вывести их на екран ..... и у меня ничего не получаеться или я просто не умею пользоваться printf . содержимое буфера следуйщее: www.mine.ru:bplace1

Код

 bool res = false;
 char buf[MAXLINE];
 char  b_place[20],b_site[20],middle[30];                  
 recv(handle,buf,MAXLINE,0);
 res = true; 
 int a=0;
 int count = strlen(buf);
 for(int i = 0;i < 20;i++)
      {
       if (buf[i] == ':')
         {
    i++;
    a = 1;
    res = false;
          }
     if (res == false)
         b_place[a]= buf[i];
    else 
         b_site[a] = buf[i];
     a++;
     }

printf(b_place);// И в обоих принтах выводит абру кадабру
printf(b_site); //

Подскажите плизз очень надо ... у меня уже голова просто болит второй день не одной путной функции для вывода подобрать не могу. потому что до етого всё время в Винде по Винду писал там ето ращз плюнуть.... а тут сума схожу !! =( Хелп
PM MAIL   Вверх
Бонифаций
Дата 10.2.2006, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



выведи с помощью puts если сомневаешься в printf. а еще лучше проследи в дебагере.

PS. посмотри strtok для разделения строки


--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
SergeanTSID
Дата 10.2.2006, 22:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 12.1.2006
Где: Беларусь, Брест

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



Абру кадабру выводит потому что нет завершающего строку нуля.
Попробуй такой вариант.
Код

char buf[MAXLINE];    
char b_place[20],b_site[20],middle[30];                   
recv(handle,buf,MAXLINE,0);
if(char *pStr = strchr(buf, ':'))
{
    // pStr указывает на ':'
    pStr[0]='\0'; // замещаем ':' на 0 (это в buf)
    strncpy(b_place, buf, 20); // копируем первую часть в b_place
    strncpy(b_site, pStr+1, 20); // копируем правую часть в b_site
    printf("%s\n", b_place);
    printf("%s\n", b_site);
 }


Это сообщение отредактировал(а) SergeanTSID - 11.2.2006, 16:07
PM MAIL WWW ICQ   Вверх
Бонифаций
Дата 11.2.2006, 12:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



на самом деле вариантов много. Например

Код

#include <stdio.h>
#include <string.h>

int main()
{
 char src[] = "www.mine.ru:bplace1";

 puts(strtok(src,":"));
 puts(strtok(NULL,":"));

 return 0;
}



или

Код


#include <stdio.h>

int main()
{
 char src[] = "www.mine.ru:bplace1";
 char b[20],b1[20];

 sscanf(src1,"%[^:]:%[^:]",b,b1);
 puts (b); puts(b1);
 return 0;
}




--------------------
 Бонифаций.
 
PM MAIL ICQ Skype GTalk Jabber YIM   Вверх
bilbobagginz
Дата 12.2.2006, 01:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


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

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



функция strtok заманчива, но уж очь чревата последствиями: человек через сокет получает. a strtok() известен своей любовью помогать черношапым крепышам.

думаю стоит на самом деле запустить gdb... и посмотреть что же там приходит.
скорее всего окажется, что приходит либо UNICODE либо не перевели в сетевой поорядок буффер перед отсылкой, и после получeния ( htons(), ntohs() и т.д. )


--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Sollo
Дата 13.2.2006, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



на самом деле я решил ету проблему с помощью strcpy но теперь появилась друга проблема .... =(((((
Код

#define MAXLINE 40
char path[MAXLINE*2],b_site[MAXLINE],b_place[MAXLINE];
path = b_site+'/'+b_place+'/'+b_place+'.ini';

мне нужно можно так сказать путь создать соединив ето всё .... в C++ Builder всё просто создал переменную AnsiString и клей в неё что хочешь а под Юнихом немогу понять как мне ето сделать !
Ребята хелп кто знает что у меня не так !
PM MAIL   Вверх
bilbobagginz
Дата 13.2.2006, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


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

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



извини, но дебажить это программу видимо придется тебе.
в gdb, на клиенте:
поставь брейк-пойнт после получения (rcv(), или read())
break <номер строки>
запусти прогу:
run
и жди smile
на сервере, поставь брейк-пойнт до отсылки (send(), или write())
запускай, посмотри что сидит в буффере на винде. потом запусти продолжение.
и иди на клиент.

там тебя ждет твой буффер после прогулки по сети.




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
Sollo
Дата 13.2.2006, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за совет. Я точно знаю что у меня в буфере .... но вопрос не в етом я по Линух никогда не писал и немогу понять каким образом мне соеденить две переменные типа char [20] в одну переменную типа char [50]
PM MAIL   Вверх
Adil'
Дата 13.2.2006, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



"соединить две переменные в одну" не получится. Можно только скопировать содержимое одного массива в другой, и добавить содержимое третьего, для си-шных строк можно так:
Код
char ch3[50], ch2[20]="two",ch1[20]="one";
strcpy(ch3,ch1);
strcat(ch3,ch2);



--------------------
Удачи
PM MAIL WWW   Вверх
Sollo
Дата 13.2.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хорошо а такой вопрос а можно как то проверить в какой кодировке символы находяться в буфере ?
PM MAIL   Вверх
threef
Дата 14.3.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Отправитель может проставлять кодировку. Иначе - пиши "интеллектуальную проверку", напиши словарик для разных кодовых таблиц и отыскивай соответствия или несоответствия. Не забудь о мультибайтовых кодировках.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

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

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


 




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


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

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