Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Формирование и вывод данных


Автор: metoflex 7.7.2011, 08:04
Приветствую Уважаемые пользователи!

Мучаюсь второй день. Я на сервере формирую информацию (Сама цель - написание trace). И после формирования укидаю ее в веб-интерфейс. 

Код формирования:

Код

std::string somestring="", resultstr="";
int l=0;
resultstr="";
somestring="";

while (l<3)
             {
             switch(l){
          case 0:
              sprintf((char*)somestring.c_str(),"%2d:    %4d ms",ttl, time[0]);
              resultstr+=somestring;
          break;
          case 1:
              sprintf((char*)somestring.c_str()," %4d ms ", time[1]);
              resultstr+=somestring;
          break;
          case 2:
              sprintf((char*)somestring.c_str()," %4d ms     %i.%i.%i.%i<br><br>",
                                      time[2],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);
              resultstr+=somestring;
          break;
          default:
          printf ("DEFAULT");
          }
         l++;
 }

    resultstr+="";
    strcpy(outBuf, resultstr.c_str());
    websWrite(wp, outBuf);
    my_socket.CloseSocket();
    websFooter(wp);
    websDone(wp, 200);
    resultstr="";
    return;



Сам trace проходит успешно, но вот инфу выводит следующую:

0 ms 192.168.15.254

br> br> br> br> br> br> 


Пробовал использовать вместо while - for, пробывал также уходить от switch к if, думал мб в этом засада, но все тщетно.
Подскажите пожалуйста в чем моя ошибка или мб можно то, что я реализую через switch и string реализовать как-то иначе. Уже 8 часов за 2 дня потратил на исправление этого бага.

В свою очередь, если использовать код вида:

Код

std::string somestring="", resultstr="";
resultstr="";
somestring="";

for(int i=0; i<=2; i++)
         {

         switch (i)
         {
         case 0:
         {

                 sprintf((char*)somestring.c_str(),"%2d:    %4d ms",ttl, time[i]);
resultstr+=somestring;

         }break;
         case 1:
         {

                 sprintf((char*)somestring.c_str()," %4d ms ", time[i]);

         }break;
          case 2:
          {

                  sprintf((char*)somestring.c_str()," %4d ms     %i.%i.%i.%i<br><br>",
                          time[i],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);


                  resultstr+=somestring;

              printf("\n%s\n",resultstr);
          }break;
         };
         }

    resultstr+="";
    strcpy(outBuf, resultstr.c_str());
    websWrite(wp, outBuf);
    my_socket.CloseSocket();
    websFooter(wp);
    websDone(wp, 200);
    resultstr="";
    return;


Вывод получаю в вебе следующий:

1 ms 192.168.15.254

0 ms 192.168.25.254

1 ms 195.151.213.90

3 ms 193.232.246.118

3 ms 193.232.246.118

3 ms 81.19.64.76

4 ms 81.19.64.189

3 ms 81.19.70.3


т.е. такое ощущение, как будто проге абсолютно наплевать на то, что я творю в case 1 и  case 2.



Спасибо Огромное!

Автор: metoflex 7.7.2011, 09:27
Решение нашел:

Код

for(int i=0; i<=2; i++)
     {
         switch (i)
         {
         case 0:
         {
             sprintf(outBuf,"%d:    %d ms",ttl, time[i]);
             websWrite(wp, outBuf);
         }break;
         case 1:
         {
             sprintf(outBuf,"    %d ms", time[i]);
             websWrite(wp, outBuf);

         }break;
         case 2:
         {
             sprintf(outBuf," %d ms %i.%i.%i.%i<br>",
              time[2],rcvdIP[0],rcvdIP[1],rcvdIP[2],rcvdIP[3]);
             websWrite(wp, outBuf);
             free(outBuf);
         }break;
         };
}


Но не красивое, если кто-то сможет подсказать, что-то более иили менее адекватное, чем я сваял, буду весьма благодарен.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)