2015-11-25 66 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