Причина использования стандартных библиотечных функций Qt - PullRequest
1 голос
/ 26 марта 2020

Есть ли какая-либо причина использовать стандартные обертки функций Qt, такие как qstrncpy вместо strncpy?

Я не смог найти ни одной подсказки в документации. И мне любопытно, есть ли функциональная разница. Похоже, что код зависит от Qt, даже в не обязательных местах.

Я нашел это: Оболочка Qt для C библиотек Но это не отвечает на мой вопрос.

Ответы [ 2 ]

1 голос
/ 26 марта 2020

Эти методы являются частью усилий Qt по обеспечению независимости от платформы. Qt пытается скрыть различия между платформами и использовать лучшее, что может предложить каждая платформа, тиражируя эту функциональность на платформах, где она недоступна. Вот что говорит документация qstrncpy:

Безопасная функция strncpy ().

Копирует не более len байт из sr c (останавливаясь на len или заканчивая '\ 0', в зависимости от того, что наступит раньше) в dst и возвращает указатель на dst. Гарантирует, что dst завершается '\ 0'. Если sr c или dst равен nullptr, немедленно возвращает nullptr.

[…]

Примечание. При компиляции с помощью компилятора Visual C ++ версии 14.00 (Visual C ++ 2005) или более поздней версии внутренне будет использоваться функция strncpy_s.

Поэтому qstrncpy безопаснее, чем strncpy.

1 голос
/ 26 марта 2020

Оболочки Qt для этих функций безопаснее стандартных, поскольку они гарантируют, что строка назначения всегда будет заканчиваться нулем. strncpy() не гарантирует этого.

В C11 strncpy_s () и другие суффиксы _s() были добавлены как безопасные строковые функции. Однако они не доступны ни в одном стандарте C ++, они C -только. Обертки Qt исправляют это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...