gpt4 book ai didi

Char[] 丢失数据

转载 作者:行者123 更新时间:2023-11-30 17:31:21 26 4
gpt4 key购买 nike

所以我有一个结构来存储有关 IRC 连接的信息。它工作正常,但是当我尝试修改值时它会变成空;

这是我的结构:

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);
}
}

两个问题:

它实际上会更改为正确的 channel ,除非我在 channel 名称中出现奇怪的字符,我有时会这样做(颠倒的问号)。为什么这种情况有时会发生,而如果我的 message.message 是三个部分“!JOINCHANNEL #test random”,但它永远不会发生,但当它有两个部分时,它有时会给我随机字符:“!JOINCHANNEL #test”。我怎样才能解决这个问题?

其次,也是更重要的一点,在handle_message函数返回之后,info.channel的值似乎消失了。我认为 strcpy() 会在返回后保留值,因为它是 char[4097] 但似乎并非如此。我是做错了什么还是有一个我没有听说过的错误。

最佳答案

编辑:假设 buff 已经是一个 malloc 指针(因为您将其传递到函数中,并且据我所知不存在任何功能问题)那里),我修改了我的代码。我第一次回答这个问题的时候就理解错了。

我没有看到任何动态内存分配,并且 char[4097] 没有这样做,所以我觉得这就是问题所在。如果不是的话我会删除这个答案。

基本上,在函数返回后,char[4097] 中在堆栈上分配的内存就会超出范围。无论堆栈是什么样子,您都需要内存来持久保存。您想要在 handle_message 之外包含如下所示的代码:

struct connection_info{
char* user;
char* host;
char* port;
char* nick;
char* channel;
};

struct connection_info* info

handle_message中:

info = malloc(sizeof(connection_info));
// Then, in the code snippet you posted
if(strstr(message.message, "!JOINCHANNEL") != NULL){
//You can initialize with calloc instead of memset with 0s
info->channel = calloc(strlen(channel)+1);
strcpy(info->channel, channel);
}

关于Char[] 丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24656951/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com