我是C的新手(我更习惯于C ++),我正在尝试创建一个IRC Bot。我目前正在努力寻找正确的字符串解析函数来解析这一行:
:nick!~username@server PRIVMSG #channel :message (could contain the word PRIVMSG)
所以,我问是否有人可以告诉我将用于将这一行拆分为:
感谢您的帮助!
答案 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()。
的网页