问题描述
|
我对C还是很陌生(我更习惯C ++),并且正在尝试创建IRC Bot。我目前正在努力寻找正确的字符串解析函数来解析此行:
:nick!~username@server PRIVMSG #channel :message (Could contain the word PRIVMSG)
因此,我问是否有人可以向我展示将这一行分解为哪些功能?
缺口
用户名
服务器
渠道
信息
谢谢你的帮助!
解决方法
我可能会使用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);
, 考虑到所有这些都在您可以写入的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)的页面。