QString()vs sprintf()

时间:2014-11-14 11:57:32

标签: c++ qt qstring

我有一些代码,客户端和服务器之间有TCP连接。我需要将一些xml数据发送到服务器并从中接收响应。我想这样做:

char request[MAX];
sprintf(request, "<attestationRequest><majorVersion>%d</majorVersion><minorVersion>%d</minorVersion></attestationRequest>", major, minor);
write(sockfd,request, length);

while(recv(sockfd, response, MAX, 0) >= 0)
{
    cout << "response " << response;
    //do something;
}   

但收到的数据是(预期回复+请求)。

如果我尝试使用QString填充数据,则收到的数据是正确的。

QString request = QString("<attestationRequest>"
                               "<majorVersion>%1</majorVersion>"
                               "<minorVersion>%2</minorVersion>"
                           "</attestationRequest>")
                            .arg(major)
                            .arg(minor)

其余代码对于这两种情况都是相同的。我使用sprintf时收到的数据超过11000字节,QString时收到9000字节。我无法理解我是否遗漏了什么。

2 个答案:

答案 0 :(得分:2)

IMO两种解决方案都不好 使用QXmlStreamWriter更安全,更好。在大多数情况下,对文本的手动操作将以错误编码或丢失转义序列或其他xml格式违规结束。

其他问题是您没有提供任何数据如何进行沟通。很可能是导致您出现问题的错误。

答案 1 :(得分:0)

最有可能的问题是,UTF-16数据是通过连接发送的(即QString。)

也许如果您尝试了这些命令的w_char版本,它可能会成功。