【问题标题】:Poco FIFOBuffer read() errorPoco FIFOBuffer 读取()错误
【发布时间】:2015-06-21 01:10:00
【问题描述】:

我无法让 Poco::FIFOBuffer.read() 工作。获取访问冲突错误或变量结果周围的堆栈已损坏。

    std::string output;

    Poco::FIFOBuffer recvData(BUFFERLEN);

    int iResult = mySockets[vect[2]]->receiveBytes(recvData);
    char* result = "";

    std::cout << recvData.read(result, recvData.size());
    output = result;

在程序中的其他地方似乎可以正常工作(vect 是矢量)mySockets 是地图

Poco::FIFOBuffer sendData(BUFFERLEN, false);
sendData.copy(vect[3].c_str(), vect[3].size());
int iResult = mySockets[vect[2]]->sendBytes(sendData);
output = "data sent, sendBytes returned: " + std::to_string(iResult);

参考:http://pocoproject.org/docs-1.5.0/Poco.BasicFIFOBuffer.html#11400

【问题讨论】:

  • char* result = ""; std::cout &lt;&lt; recvData.read(result, recvData.size()); 您正在尝试更改字符串文字的内容。这是未定义的行为。
  • 另外,您指向read 函数的链接表明缓冲区已调整大小。对不起,但我看不到该函数如何调整该缓冲区的大小并将这些更改反映给调用者,如果它只传递一个指向缓冲区的指针。要调整缓冲区的大小,您需要对指针的引用或指向指针的指针作为第一个参数。但是,该链接仅显示指向 T 的指针。要么这些文档有误,要么我缺少某些东西。
  • 文档是wrong。将在 1.6.1 中修复。

标签: c++ sockets poco-libraries


【解决方案1】:

如上评论所述,文档为wrong

如果您希望缓冲区自动调整大小,请使用Poco::Buffer&lt;char&gt;;或者,确保 char* 指向足够的空间来容纳数据(这很棘手 - 您必须查询 FIFOBuffer 以了解 receiveBytes() 调用返回多少,因此使用 Poco::Buffer 更容易选项)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-23
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 2018-04-25
    相关资源
    最近更新 更多