使用 strlen 获取 winapi 中的字符串长度
Getting string length in winapi with strlen
>我正在尝试获取缓冲区的长度,但出现未处理的异常错误。谁能帮我。我做错了什么?
case WM_COMMAND:
switch (LOWORD(wp))
{
case IDC_MAIN_BUTTON:
{
char buffer[256];
SendMessage(hEdit,
WM_GETTEXT,
sizeof(buffer) / sizeof(buffer[0]),
(LPARAM*)(buffer));
int bl = strlen(buffer);
MessageBox(NULL,
bl,
"Information",
MB_ICONINFORMATION);
}
break;
}
MessageBox
的第二个参数是指向TCHAR
的指针。你传递了一个整数(并且至少应该得到一个合适的警告)。
您必须首先将整数转换为字符串表示形式,例如在非 Unicode 构建中:
int bl = strlen(buffer);
char buf[20];
_snprintf(buf, sizeof(buf), "%d", bl);
MessageBox(NULL, buf, "Information", MB_ICONINFORMATION);
(警告:代码未测试。
除了M Oehm提到的错误之外,这里还有两个问题:
SendMessage()
的结果未经测试。- 传递的缓冲区是未初始化的,并且在任何情况下都会传递给
strlen()
,因此如果未设置为 C-"string",即至少包含一个用作0
终止符的' '
,则对strlen()
的调用将失败。
要解决此问题,请至少更改此设置:
char buffer[256];
成为
char buffer[256] = "";
相关文章:
- 删除一个线程上有数百万个字符串的大型哈希映射会影响另一个线程的性能
- c 字符串 c++ 中 strlen 的递归版本
- 当 NUL 字符被定义为字符串的一部分时,为什么 strlen() 不计算终止 NUL 字符的字节?
- strlen 是否针对字符串文字进行了优化?
- CPP - strlen 不会输出多个单词的整个长度 [仅限 C 字符串]
- 恒定字符阵列的获取字符串长度函数(strlen)不是恒定表达式
- char*newx=p+strlen(str1);这将如何执行,因为strstr将返回指向另一个字符串的第一个匹配字符的
- 错误:无法将const字符串转换为参数1的const char*为size_t strlen(const char*)
- 用 sizeof 替换 strlen 代替 C 字符串
- 带有 #include< iostream.h> 的程序允许使用 strlen() 等字符串函数。为什么?
- 在不使用 strlen() 的情况下计算字符串中的字母
- 如何使用strlen函数获取字符串的长度
- 字符串的向量、每个字符串的长度和c++中的strlen
- 使用 strlen 获取 winapi 中的字符串长度
- C 字符串的长度:std::strlen() vs. std::<char>char_traits::length()
- 创建我自己的strlen和子字符串函数
- 汇编中的字符串长度例程,以替代c++中的strlen
- 使用strlen剔除字符串中的指定单词
- c++中字符串的Strlen
- 使用 strlen() 查找字符串数组的长度