gpt4 book ai didi

c++ - wcslen 或 strlen 应该防止无限循环?

转载 作者:太空宇宙 更新时间:2023-11-04 15:23:50 25 4
gpt4 key购买 nike

此函数计算字符串开头和终止空字符之间的字符数。

size_t wcslen(const wchar_t* sz)
{
size_t l = 0;
while (*sz++) ++l;
return l;
}

现在如果没有终止空字符,这个函数应该检测到还是不检测?他们如何检测?循环是否有限制并且它确实不是无限的?

最佳答案

这个函数是怎么做到的?的定义长度是“直到终止的空字符”。一个“更安全”该函数的版本可能需要额外的最大长度,这将对应于缓冲区的长度数据举行。但是使用以 nul 结尾的字符串是在 C 中是通用的,大多数情况下,如果你调用它函数,这是因为调用你的函数只给了你一个指针,而您不知道缓冲区的实际长度。

在实践中,如果输入没有终止 nul字符,你会得到一个缓冲区溢出,读取内存超出缓冲区的末尾。这样做,迟早你会要么遇到一个包含 0 的字节,然后考虑你的字符串的结尾,或者你最终会得到一个地址未映射到您的进程,您将崩溃。

关于c++ - wcslen 或 strlen 应该防止无限循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13507869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com