1

是否有任何理由使用 Qt 标准函数包装器,如 qstrncpy 而不是 strncpy?

我在文档中找不到任何提示。我很好奇是否有任何功能差异。看起来像是让代码依赖于 Qt,即使在非强制性的地方也是如此。

我发现了这个:C library 的 Qt wrapper 但它没有回答我的问题。

4

2 回答 2

1

这些函数的 Qt 包装器比标准包装器更安全,因为它们保证目标字符串总是以空值结尾。strncpy()不保证这一点。

在 C11 中,添加了strncpy_s() 和其他_s()后缀函数作为安全字符串函数。但是,它们在任何 C++ 标准中都不可用,它们仅适用于 C。Qt 包装器解决了这个问题。

于 2020-03-26T08:33:17.697 回答
1

这些方法是 Qt 平台独立性努力的一部分。Qt 试图隐藏平台差异并使用每个平台提供的最佳功能,在不可用的平台上复制该功能。这是文档qstrncpy必须说的:

一个安全的 strncpy() 函数。

最多从 src 复制 len 个字节(停止在 len 或终止的 '\0' 以先到者为准)到 dst 并返回指向 dst 的指针。保证 dst 以 '\0' 结尾。如果 src 或 dst 为 nullptr,则立即返回 nullptr。

[…]

注意:使用 Visual C++ 编译器版本 14.00 (Visual C++ 2005) 或更高版本进行编译时,将在内部使用函数 strncpy_s。

所以qstrncpystrncpy.

于 2020-03-26T08:34:42.840 回答