我對C很陌生(我更習慣於C++),我正在嘗試創建一個IRC Bot。目前我正在努力尋找正確的字符串解析函數解析這一行:解析C中的IRC PRIVMSG
:[email protected] PRIVMSG #channel :message (could contain the word PRIVMSG)
於是,我問如果有人能告訴我什麼功能我會用這條線分割成:
- 缺口
- 用戶名
- 服務器
- 通道
- 消息
感謝您的幫助!
我對C很陌生(我更習慣於C++),我正在嘗試創建一個IRC Bot。目前我正在努力尋找正確的字符串解析函數解析這一行:解析C中的IRC PRIVMSG
:[email protected] 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()。
郵件正文是否包含單詞「PRIVMSG」並不重要:冒號後面的所有內容都被認爲是郵件正文,最多512字節後面以「\ r \ n」結尾。 – Philip 2011-05-27 22:32:30