20
裏面的message()
是什麼意思與20
之間的message.data(),
在下面的代碼中?如何發送不包含字節 x00的不同長度的消息?
zmq::message_t message(20);
snprintf ((char *) message.data(), 20 ,"%05d %d %d", zipcode, temperature, relhumidity);
publisher.send(message);
通過閱讀文檔,message(20)
將消息初始化爲20字節長。 message.data(),
之後20
做什麼?
如何更改消息的大小以發送沒有結尾字節的消息\x00
?可以在外部聲明"%05d %d %d", zipcode, temperature, relhumidity
,並使用該變量的長度來啓動消息併發送消息?
*「20後message.data()做了什麼?」*您是否閱讀過'snprintf()'函數的文檔? – cdhowie
謝謝,我讀過它然後http://www.cplusplus.com/reference/cstdio/snprintf/。這意味着如果用戶打算髮送整個消息,則大小例如'message()'和'snprintf()'中的'20'必須相同,是否正確? – Greg
'snprintf()'的參數僅用於防止'snprintf()'溢出它正在寫入的分配。也就是說,如果要寫超過20個字符,告訴它可能只寫20個字符會導致它提前停止。 (考慮「溫度」和「溼度」每個都有7位以上的情況 - 消息的大小不足以容納格式化文本,超出緩衝區末尾的寫入會導致未定義的行爲。) – cdhowie