- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
此函数计算字符串开头和终止空字符之间的字符数。
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/
根据http://msdn.microsoft.com/en-us/library/78zh94ax%28v=vs.80%29.aspx , wcslen函数和其他类似函数存在缓冲区溢出问题带来的潜在
我一直在尝试使用 cpw 库来处理一些图形。我设置好了,但我似乎在编译时遇到了问题。 即,在字符串 header 中,它通过 提供对 unicode 的支持 #if defined(UNICODE)
此函数计算字符串开头和终止空字符之间的字符数。 size_t wcslen(const wchar_t* sz) { size_t l = 0; while (*sz++) ++l;
编译器:http://sourceforge.net/projects/mingwbuilds/files/ #include #include #include using namespace
在 C 中,我在执行时遇到段错误 const wchar_t *id = L"{{content}}\0"; wprintf(L"%s\n", wcslen(id)); 我不明白这里出了什么问题...
我发现 wcslen()在 VC++2010 中返回正确的字母数;同时 Xcode 没有。 例如,下面的代码在 VC++ 2010 中返回正确的 11,但在 Xcode 4.2 中返回不正确的 17。
我发现当源是 wchar_t 数组(压缩结构的成员)时,wcslen() 在 gcc 上返回不正确的结果(在 msvc 上是正确的)。我知道在 linux 上 sizeof(wchar_t) == 4
源代码: const wchar_t* x = L"abc"; printf("%d\n",wcslen(x)); 我用 g++ -fshort-wchar xxx.cpp -o xxx 编译了它
argv[1] 似乎比输入的字符多返回 1 个字符。 argv[2] 是正确的。 #include int main(int argc, wchar_t *argv[]) { printf("%
从“wcslen”替换为“strnlen_s”时,使用const char* 进行类型转换是否正确? 在下面的函数中我正在替换 if (szPath[wcslen(szPath) - 1] != L'
在 Windows 下将 C++ 程序从 32 位移植到 64 位时,我意识到不支持 _tcslen,而是应该使用 strlen/wcslen(对于非 unicode/unicode)。我开始怀疑 如
有一个 strlen 和一个 wcslen 函数,但是有一个模板字符数组长度函数,所以你可以做一些类似 strlen 的事情或 strlen ? 如果没有,那我想我会自己写。 最佳答案 你有 std:
我是一名优秀的程序员,十分优秀!