На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Qraizer, Hsilgos
  
> Socket + char , Небольшая трабла
    Здрасьте, у меня такая несложная трабла....
    я хочу всего-лишь переслать строку через сокеты.

    Формирую и отсылаю строку вот так:

    char Buffer[1000];
    strcpy(Buffer,"MSG");
    lstrcat(Buffer,NULL);
    lstrcat(Buffer,m_caption);
    lstrcat(Buffer,NULL);
    lstrcat(Buffer,m_text);
    lstrcat(Buffer,NULL);
    lstrcat(Buffer,MSGBTN);
    lstrcat(Buffer,NULL);
    lstrcat(Buffer,MSGICON);
    send(Listen_Socket,Buffer,strlen(Buffer),NULL);

    У меня в строке имеется 5 параметров, которые мне нужно передать, чтобы упростить дело, я разделил
    данные параметры NULL'ом.

    При получении у меня следующий код:

    char Buffer[1000];
    int n=recv(Accept_Socket,Buffer,256,NULL);
    Buffer[n]=NULL; /////// Отсекаю до NULL'a
    char* pBuf=Buffer;
    MessageBox(NULL, pBuf, szAppName, MB_ICONINFORMATION);

    то есть в pBuf должно содержаться выраженение "MSG",
    но MessageBox выводит ВСЮ СТРОКУ ЦЕЛИКОМ и все параметры слитно, без пробела, в том месте где NULL.
    Как отделить куски строки??? Что у меня неверно.
    Спасибо.
      lstrcat(Buffer,NULL);


      Это ничего не добавит к Buffer. Попробуй разделять символом "\1".

      lstrcat(Buffer,"\1");
        Цитата (Uncle_Bob @ 21.11.03, 22:41)
        lstrcat(Buffer,NULL);


        Это ничего не добавит к Buffer. Попробуй разделять символом "\1".

        lstrcat(Buffer,"\1");

        а что означает "\1" ? Тоже что и NULL?

        char Buffer[1000];
        int n=recv(Accept_Socket,Buffer,256,NULL);
        Buffer[n]=NULL;
        char* p=Buffer;

        MessageBox(NULL, p, szAppName, MB_ICONINFORMATION);
        Теперь вместо всей слитной строчки выводится строка, а между словами кубики....... sad.gif
        у меня такой вопрос: Как отсечь столько символов, сколько имеется их слева до NULL или до "\1".
          Просто нельзя добавить таким образом NULL к строке... Надо либо использовать CString:

          CString str = "Word1";
          str += '\0';
          str += "Word2";


          либо извращаться с буфером

          Цитата
          Как отсечь столько символов, сколько имеется их слева до NULL или до "\1".



          Опуская обработку ошибок что-нить вроде
          char *pMsg = Buffer;

          char *pCaption = strchr(Buffer, '\1');
          *pCaption = 0;
          pCaption ++;

          char *pText = strchr(pCaption, '\1');
          *pText = 0;
          pText++;

          char *pTemp = strchr(pText, '\1');
          *pTemp = 0;

          MessageBox(NULL, pText, pCaption, MB_ICONINFORMATION);


          Можно еще юзать для этих целей strtok

          Добавлено в
          Вообще, к строке добавить NULL - это нечто непонятное. Можно добавить например нулевой символ...
          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
          0 пользователей:


          Рейтинг@Mail.ru
          [ Script execution time: 0,0563 ]   [ 15 queries used ]   [ Generated: 18.07.25, 02:53 GMT ]