2015-11-25 67 views
-4

我已经写了一个libcoap客户端与leshan服务器通信 问题是每当我做了一个PUT请求,第一次是正确的,但如果我从leshan做一个PUT请求,说12345678之后是它增加了一个乱码的有效载荷。 此外,如果我的下一个有效负载更长,它的行为正确,没有填充的乱码值。 如果我再次减小有效载荷大小,则较旧的大小将保留并填充有效负载的值。 CoAP客户端的 代码片段:sdsdsdsdasasasast�c指针问题与随机垃圾

和Wireshark说:sdsdsdsdasasasast\201\005

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

coap_get_data从服务器

我进入有效载荷在乐山服务器sdsdsdsdasasasast

但收到客户端获取数据

I al方法做了memset的数据插入阵列之前,我仍然不知道它在哪里得到了有效载荷

+2

'unsigned char * data;' - 如果你没有初始化它,你希望'data'指向哪里? –

+1

您可能需要为'data' - 'malloc'分配一些内存? –

+0

@TheParamagneticCroissant已经做了,忘了在这里提到: data =(unsigned char *)malloc(sizeof(unsigned char)* 128); memset(data,'\ 0',sizeof(data)); – Zim

回答

1

在你的代码后,填补这样的事情,

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

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

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

无论使用编译器分配的内存,像

unsigned char data[256] = {0}; 

或使用malloc()或家庭获得分配给指针的内存。不要忘记随后释放它,寿。

+0

已经做了,但结果是一样的。 – Zim