gpt4 book ai didi

c++ - 为什么显示笑脸而不是用户名?

转载 作者:太空宇宙 更新时间:2023-11-04 14:47:00 24 4
gpt4 key购买 nike

为什么显示笑脸而不是用户名?

更改控制台属性没有帮助...

#include "pch.h"
#include <windows.h>
#include <Lmcons.h>
#include <string>
#include <iostream>

std::string UserName() {
TCHAR username[UNLEN + 1];
DWORD size = UNLEN + 1;
std::string UserName1;
UserName1 = GetUserName((TCHAR*)username, &size);
std::cout << UserName1 << std::endl;
return UserName1;
}
int main()
{
UserName();
}

结论:☺

最佳答案

看看 MSDN documentation该功能的。签名是

BOOL GetUserNameA(
LPSTR lpBuffer,
LPDWORD pcbBuffer
);

函数的返回值是一个BOOL,如果函数成功则返回非零。它返回一个字符串。您传递给 lpBuffer 参数的 username 缓冲区将包含用户名:

std::string UserName() {
char username[UNLEN + 1];
DWORD size = UNLEN + 1;
std::string UserName1;
if (GetUserNameA(username, &size))
UserName1.assign(username, size-1);
std::cout << UserName1 << std::endl;
return UserName1;
}

至于为什么显示笑脸,原因很简单:函数刚好返回TRUE,在您的平台上是1BOOL 是一个int,它可以被强制转换为一个char。因此,编译器调用 std::string 上的 operator=(char) 方法,将 char 0x01 写入 std: :string 并将其长度设置为 1:

The string value is set to a single copy of this character (the string length becomes 1).

回顾一下,您将字符代码 0x01 分配给您的 std::string。我假设您在 Windows 命令提示符中运行您的代码,它使用从 DOS 代码页 437 派生的编码。这是它的字符映射:

character map

左上角是代码0。你看到它旁边是什么? (提示:0 之后是 1)。

P.S.: 在 Windows 上,您可以通过按住 Alt 并输入字符代码来输入 CP437 的任何字符。 Alt + 1 会给你运行程序时得到的笑脸。

关于c++ - 为什么显示笑脸而不是用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54099332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com