宽字符中原子字符串的最大长度是多少,255 或 127
What is maximum length of atom strings in wide characters, 255 or 127?
Atom表参考说它是255字节,所以它给了我127个字符,但在我之前的问题中,我已经了解到MSDN并不总是准确的。不幸的是,在这种情况下,PSDK 标头中没有权威定义。我还检查了 WINE 来源,它们使用 255 个字符:
#define MAX_ATOM_LEN 255
...
WCHAR buffer[MAX_ATOM_LEN];
似乎很容易测试,在我的机器上,255 成功,256 失败,ERROR_INVALID_PARAMETER
. 当然,你可以只使用较短的字符串。
#include <Windows.h>
#include <iostream>
#include <string>
int main()
{
const std::wstring s1(255, L'A');
const std::wstring s2(256, L'A');
ATOM a = AddAtomW(s1.c_str());
if(!a || FindAtomW(s1.c_str()) != a)
{
std::cerr << "AddAtom/FindAtom @ len 255 failed - " << GetLastError() << "n";
}
DeleteAtom(a);
a = AddAtomW(s2.c_str());
if(!a || FindAtomW(s2.c_str()) != a)
{
std::cerr << "AddAtom/FindAtom @ len 256 failed - " << GetLastError() << "n";
}
DeleteAtom(a);
return 0;
}
根据文档,最大长度确实为 127 个字符。出于内部原因,任何实现都可能使用更高的值,因为这不会影响任何正确的程序。
另一个答案(来自 ReretireNinja)假设实现必须为无效参数提供错误。这不是Windows的工作方式。
相关文章:
- C++字符*缓冲区的大小
- HEX值到wchar_t字符(UTF-8)的转换
- 为什么 Serial.println(<char[]>);返回随机字符?
- 我的字符计数代码计算错误.为什么
- 字符串-C++后显示的随机字符
- 如何检查一个c++字符串中有多少相同的字符/数字
- 当我们不使用空字符显式初始化字符数组时,字符串的长度是多少?
- c++中无符号字符b[2]的初始值是多少
- JNI 中常量字符* 的寿命是多少?
- 在计算使用了多少个数组索引的同时,如何填充一个来自用户输入的字符的数组?(使用cin.get)
- 宽字符中原子字符串的最大长度是多少,255 或 127
- C++ 中有多少个方法逐个字符读取字符串,以对每个字符执行所需的操作
- 如何将特定数量的字符转换为大写或小写,并计算单词有多少个大写和小写字母
- 2 字节可以容纳多少个字符
- 字符串需要多少字节?一个字符
- 在文本编辑程序的正常流程中,我应该更新多少字符?
- 用字符数组实现BigInteger的上限是多少?
- 计算一个整数截断符上面有多少个字符
- c++中可以作为输入的字符数组的最大长度是多少?
- C++(使用 <windows.h> 的串行通信) - 我如何事先知道 ReadFile() 方法将读取多少个字符