Итак, у меня есть структура, в которой хранится информация о подключении 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 все еще существует? –