宽字符中原子字符串的最大长度是多少,255 或 127

What is maximum length of atom strings in wide characters, 255 or 127?

本文关键字:多少 字符 字符串      更新时间:2023-10-16

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的工作方式。