调用GetUserNameEx()时,我有一个关于奇怪的返回大小的问题。也许有人已经遇到过这个问题。
我两次调用GetUserNameEx():首先获取所需的缓冲区大小,然后实际填充缓冲区。
在documentation中,您可以阅读有关尺寸参数的信息:
如果lpNameBuffer太小,则函数失败,GetLastError返回ERROR_MORE_DATA。此参数接收所需的缓冲区大小,以Unicode字符(无论是否使用Unicode),包括终止空字符。
我保存此值(required_size
)以检查成功返回的值。
在输入时,此变量在TCHAR中指定lpNameBuffer缓冲区的大小。如果函数成功,则变量接收复制到缓冲区的TCHAR数,不包括终止空字符。
这一个是returned_size
。
奇怪的是,如果我将项目属性中的字符编码设置为未设置,则required_size
为22,returned_size
为11。
当我将Charachter编码设置为使用Unicode字符集时,required_size
为11,returned_size
也为11。
也许我没有得到什么,但我希望required_size
不要改变。有人见过这个吗?
谢谢。
UPD:这里是code example。
答案 0 :(得分:4)
我责备。嗯,这是一个错误。它永远不会出错,因为它要求的缓冲区大小是所需大小的两倍。您将获得在第二次调用时复制到缓冲区的实际字符数,以便您知道字符串的实际大小。我不会尝试修复它,在将字符串从Unicode转换为mbcs之前实际使用缓冲区的可能性很小。虽然我没有看到它的证据。