![]() |
1
13
首先,让我们回顾一下每个功能集的优缺点: ANSI C标准库函数(CRT)
功能如下
Kernel32字符串函数
功能如下
此外,kernel32函数 能够 比CRT版本更优化:当你的可执行文件在Windows 9上运行时,为核心i13优化,kernel32 能够 使用程序集优化版本。 Shell轻量级实用函数以下是对kernel32函数的相同考虑,以及一些更复杂函数的附加值。但我怀疑他们是否得到了积极的维护,我会跳过他们。 StrSafe函数
这个
安全增强型CRT功能这些函数的优点毋庸置疑是非常类似于ANSI C的等价物,因此移植遗留代码是小菜一碟。我特别喜欢基于模板的版本(当然,仅当编译为C++)时才可用。我真的希望它们最终会标准化。不幸的是,它们有许多缺点:
结论虽然我个人最喜欢Windows开发的是StrSafe库,但我的建议是尽可能使用ANSI C函数,因为可移植代码总是一件好事。 在现实生活中,我开发了一个个性化的可移植库,其原型类似于增强安全性的CRT函数(包括强大的基于模板的技术),它依赖于Windows上的StrSafe库和其他平台上的ANSI C函数。 |
![]() |
2
4
对于新项目和现有项目,我个人的偏好是
|
![]() |
3
3
我会回答这个问题稍微有点不同。你想不想有可移植的代码?如果你想便携,除了
如果你的代码必须在Windows下运行,你可以使用“安全字符串”变量。 如果您希望是可移植的并且仍然希望有一些额外的安全性,那么您应该检查跨平台库,例如 glib 或 libapr 或其他“安全字符串库”,例如: SafeStrLibrary |
![]() |
4
1
我建议使用 标准库 ,或函数 跨平台库 . |
![]() |
5
0
我会坚持一个,我会选择最有用的库中的任何一个,以防您需要更多的使用它,我会远离kernel32.dll,因为它只是windows。 但这些只是提示,这是一个主观问题。 |
![]() |
6
0
在这些选择中,我只会使用
如果你在使用
如果您要进行大量的字符串连接/汇编,那么您真的应该编写所有代码来管理长度和当前位置。而不是:
你应该这样做:
或者,可以通过保留当前索引来避免修改指针
注意,无论您选择哪种方法,都可以通过编写自己的(简单的)函数来压缩冗余,这些函数将指针指向position/size变量并调用标准库,例如:
避免
最后,您应该注意到,在C语言中,75%的字符串复制和程序集执行完全没有用处。我的理论是,做这件事的人来自脚本语言的背景,在脚本语言中,把字符串放在一起是你一直在做的事情,但在C语言中,这并不经常有用。在许多情况下,您可以完全不复制字符串,而是使用原始副本,同时获得更好的性能和更简单的代码。我想起了最近的一个问题,OP在哪里使用
同样的事情也可以通过:
没有分配,没有清理,没有错误案例(如果
|
![]() |
Community wiki · C中有哪些耗时的操作? 1 年前 |
![]() |
Community wiki · 将所有处理器电源都投入到任务中 1 年前 |
![]() |
Community wiki · C++为C添加了什么?[已关闭] 1 年前 |
![]() |
Community wiki · 打印1到1000,不带循环或条件 1 年前 |