所以我有一個存儲有關IRC連接信息的結構。它工作正常,但當我嘗試修改它的值變空時;Char []丟失數據
這是我的結構:
struct connection_info{
char user[MAXBUFF + 1];
char host[MAXBUFF + 1];
char port[MAXBUFF + 1];
char nick[MAXBUFF + 1];
char channel[MAXBUFF + 1];
};
struct connection_info info; //Global Struct
然後,我有一個全球性的結構(connection_info)和限定在結構中的每個元素,並連接到IRC服務器我的主要方法。在我連接到IRC服務器之後,我收聽消息並解析它們。在我這樣做後,我對每條消息作出不同的迴應。這是我的問題發生的地方。
if(strstr(message.message, "!JOINCHANNEL") != NULL){
char* str = strtok(message.message, " ");
char* channel = strtok(NULL, " ");
if(str == NULL || channel == NULL || (*channel) != '#'){
strcpy(buff, "PRIVMSG ");
strcat(buff, info.channel);
strcat(buff, " :Please use format !JOINCHANNEL [#CHANNEL]\r\n");
while(send_message(buff) == -1);
}else{
strcpy(buff, "PART ");
strcat(buff, info.channel);
strcat(buff, "\r\n");
while(send_message(buff) == -1);
memeset(info.channel, 0, sizeof(info.channel));
strcpy(info.channel, channel);
memset(buff, 0, sizeof(buff));
strcpy(buff, "JOIN ");
strcat(buff, info.channel);
strcat(buff, "\r\n");
while(send_message(buff) == -1);
}
}
兩個問題:
,除非我得到的頻道名稱古怪的人物,我有時會做(倒置問號)它實際上改變到正確的通道。爲什麼有時候會發生這種情況,如果我的message.message是三部分「!JOINCHANNEL #test random」,它就不會發生,但是當它有兩部分時,它有時會給我隨機字符:「!JOINCHANNEL #test」。我怎樣才能解決這個問題?
其次更重要的是,在handle_message函數返回後,info.channel的值似乎消失了。我認爲strcpy()會在返回後保留值,因爲它是一個char [4097],但它似乎並不如此。我做錯了什麼,或者有沒有我聽說過的錯誤?
其實這不是我的內存分配爲connection_info是全球堆棧所以這是從來沒有被推關閉。事實上,strtok()在我上次調用它時給了我意想不到的行爲。所以有時候我不會得到一個頻道,我會得到一個像「#channelname \ 123p?!sad123」這樣的字符串。不過謝謝你的幫忙! – schmidt73
所以info.channel消失的問題仍然存在? –