QString () против sprintf ()

0

У меня есть код, в котором есть, есть 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)

Остальная часть кода одинакова для обоих случаев. Я получаю более 11000 байт данных, когда я использую sprintf, но 9000 байт в случае QString. Я не могу понять, не хватает ли чего-то.

  • 0
    Используйте snprintf поверх sprint . Таким образом вы убедитесь, что не переполняете буфер. Также сохраните возвращаемое значение, чтобы узнать длину строки для отправки и посмотреть, snprintf ли ее snprintf .
  • 0
    Я использовал sprintf здесь, потому что я знал размер запроса и даже выделил больше, чем нужно.
Показать ещё 3 комментария
Теги:
qt
qstring

2 ответа

2

ИМО оба решения плохие.
Безопаснее и лучше использовать QXmlStreamWriter. Ручное манипулирование текстом в большинстве случаев заканчивается неправильной кодировкой или отсутствующей управляющей последовательностью или другим нарушением формата XML.

Другая проблема заключается в том, что вы не дали никаких данных о том, как вы выполняете общение. Очень вероятно, что возникла ошибка, вызвавшая вашу проблему.

  • 0
    Я использую стандартный API connect() для обоих случаев. Нет ошибки в соединении как таковом. Я пытаюсь избежать зависимости от Qt . Итак, я попытался использовать sprintf .
0

Скорее всего, ваша проблема заключается в том, что данные UTF-16 отправляются через соединение (это QString.)

Возможно, если вы попробуете w_char-версии этих команд, это может преуспеть.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню