在C中解析IRC PRIVMSG

时间:2011-05-27 17:21:33

标签: c parsing irc

我是C的新手(我更习惯于C ++),我正在尝试创建一个IRC Bot。我目前正在努力寻找正确的字符串解析函数来解析这一行:

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

所以,我问是否有人可以告诉我将用于将这一行拆分为:

  • 缺口
  • 用户名
  • 服务器
  • 信道
  • 消息

感谢您的帮助!

2 个答案:

答案 0 :(得分:2)

我可能会使用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 :(得分:1)

考虑到所有这些都在你可以写入的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)

的网页
相关问题