- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不明白strnlen()的真正用途是什么。任何人都可以让我知道实际用途或指出我可以找到真正用途的链接吗?
最佳答案
strnlen 有两个主要用途:
您的输入是一个字符数组,如果其内容填充整个数组,并且您想要确定“字符串”(不是 C 字符串)的长度,则该数组可能不是以 null 结尾的。
接口(interface)契约保证您的输入是有效的 C 字符串,但对大小没有限制,并且您希望对大小施加限制,而不消耗不成比例的处理资源来计算大小以进行检查超出你的极限。
在我看来,情况 1 不太有趣,因为通常只需将缓冲区增大一个字节并始终在最后一个字节中存储终止符即可处理它。案例2更有趣。例如,如果您的函数以以下内容开头:
if (strlen(input) >= 256) return error_code;
如果有人将 100GB 字符串作为输入
传递,则可能需要很多秒(甚至几分钟)才能返回错误,尽管事实上在读取前 256 个字节后就已经知道会发生错误应该被退回。另一方面,如果你写:
if (strnlen(input, 256) >= 256) return error_code;
那么函数总是可以快速返回。请注意,这种转换实际上可以由编译器自动应用;将来,如果运气好的话,可能会是这样。
关于c++ - strnlen 的真正用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26349367/
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
在我当前的项目中,我根据 C11 标准进行编码(使用 gcc -std=c11 构建)并且需要类似 strnlen 的东西(strlen 的“安全”版本,它返回一个以 0 结尾的字符串的长度,但只能达
我编写了以下代码以更好地理解 strnlen 的行为方式: #include #include #include int main(int argc, char **argv) { ch
我很困惑 strnlen 如何在 C++ 中使用非 null 终止的字符串,因为我不确定它如何计算大小。 strlen 的实现很简单: size_t strlen(char *s) { siz
函数 strdup() 和 strndup() 终于进入了即将到来的 C23 标准: 7.24.6.4 The strdup function Synopsis #include char *str
我正在尝试在 LPCXpresso 上为 LPC1769 创建一个项目。我有一个 C 文件调用 #include int main() { //some stuff strnlen(
这是我的情况,我使用 TDM-GCC 4.8.1 从源代码构建了 wxWidgets 3.0。然后我们使用 Haskell 的 cabal系统构建依赖于 wx(例如 wxHaskell)的某些包,ca
我的程序是: #include #include using namespace std; int main(int argc,char **argv) { const static si
我有在 .mm 文件中使用 strnlen 的代码 使用 Xcode 4.2 时编译器可以正常构建。然而 Xcode 3.2.5 找不到 strnlen()... 我已经尝试过针对 strlen 发布
我可能要疯了,但我认为我从未在 C++ 中看到过这种情况(尽管我的引用代码是在 C 中)。为什么这里代码的返回值上有一个static,有什么影响?我认为我从未见过类范围之外的静态函数(但显然 C 没有
我正在构建最新 dcraw.c 的跨平台 OS X 版本我在 OS X 10.6.8 上执行此操作以获得 PPC 兼容性。现在我的问题是 strnlen 似乎在最新版本的程序中使用,它在 10.6.8
我是一名优秀的程序员,十分优秀!