Разбор IRC PRIVMSG в C - PullRequest
       3

Разбор IRC PRIVMSG в C

0 голосов
/ 27 мая 2011

Я довольно новичок в C (я больше привык к C ++) и пытаюсь создать IRC Bot. В настоящее время я пытаюсь найти правильные функции синтаксического анализа строки для анализа этой строки:

:nick!~username@server PRIVMSG #channel :message (could contain the word PRIVMSG)

Итак, я спрашиваю, может ли кто-нибудь показать мне, какие функции я бы использовал, чтобы разбить эту строку на:

  • ник
  • имя пользователя
  • Сервер
  • канал
  • сообщение

Спасибо за любую помощь!

Ответы [ 2 ]

2 голосов
/ 27 мая 2011

Я бы, наверное, использовал sscanf. Что-то в этом общем порядке кажется разумной отправной точкой:

char nick[32], user[32], server[32], channel[32], body[256];

sscanf(buffer, ":%31[^!]!~%31[^@]@%31s PRIVMSG #%31s :%255[^\n]", 
                 nick,     user, server,       channel, body);
1 голос
/ 27 мая 2011

Учитывая, что все это находится в буфере char [], в который вы можете писать (т.е. содержимое будет перезаписано), вы можете сделать что-то вроде:

char *nick, *username, *server, *command, *channel, *message;

nick     = strtok(buffer+1, "!");
username = strtok(NULL, "@");
server   = strtok(NULL, " ");
command  = strtok(NULL, " ");
channel  = strtok(NULL, " ");
message  = strtok(NULL, "");

Вам необходимо добавить ошибкупроверка по вышеуказанному коду, так как любой вызов strtok () может вернуть NULL, если токенов больше не найдено.Вы также можете использовать более сложный синтаксический анализ или sscanf ().

Прочитать страницы о strtok (3) и sscanf (3) .

...