gpt4 book ai didi

c 指针与随机垃圾的问题

转载 作者:行者123 更新时间:2023-11-30 21:24:56 28 4
gpt4 key购买 nike

我用libcoap编写了一个coap客户端来与乐山服务器进行通信问题是每当我发出 PUT 请求时,第一次它是正确的,但如果我从 leshan 发出 PUT 请求,假设 12345678 是有效负载,那么它会在之后添加一个乱码值。此外,如果我的下一个有效负载较长,它的行为会正确并且不会填充乱码。如果我再次减少有效负载大小,旧的大小将保留,并将乱码值填充到有效负载中。coap客户端的代码片段:

  unsigned char *data;
memset (data, '\0', sizeof(data));
coap_get_data(request, &size, &data);

coap_get_data 从服务器获取数据

我在乐山服务器中输入了有效负载作为sdsdsdsdasasasast

但是客户端收到:sdsdsdsdasasasast�

wireshark 说:sdsdsdsdasasasast\201\005

我总是在将数据插入数组之前执行memset,但我仍然不知道在有效负载后填充这些东西的位置

最佳答案

在您的代码中,

memset (data, '\0', sizeof(data));

其中data没有指向任何有效的内存,实际上调用了未定义的行为。

在复制到指针指向的内存位置(甚至从中读取)之前,您需要确保指针指向为该特定进程分配的有效内存位置。

要么使用编译器分配的内存,例如

 unsigned char data[256] = {0};

或使用malloc()或系列来获取分配给指针的内存。不过,别忘了事后释放它。

关于c 指针与随机垃圾的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33910252/

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