在VS2015 C ++中打印我的用户名

时间:2016-11-19 22:37:22

标签: c++ visual-studio-2015

所以我只想从命令行变量%username%打印我的用户名。如果我只是:

,这在cmd.exe中没有问题
echo %username%

现在我想在CPP中做同样的事情,所以我可以将它存储在字符串或char数组中。我正在运行Visual Studio 2015

#include "stdafx.h"
#include <iostream>
#include <string>

using namespace std;

int main()
{   
TCHAR* username = TEXT("USERNAME = %username%");
cout << username;
return 0;
}

每次我构建并运行程序(通过cmd.exe)我都会得到一个随机用户名:

013471A0

尝试对谷歌的建议无济于事。用户名始终是随机的。我登录VS2015,这会对任何事情产生影响吗?

2 个答案:

答案 0 :(得分:4)

std :: cout不会为您执行环境变量替换。

此外,如果启用了Unicode(即它),TEXT(“...”)将返回一个wchar_t数组。 std :: cout只知道如何打印char字符串。

要打印unicode字符串(启用unicode时由TEXT返回的字符串),您应该使用std :: wcout。

至于你的变量问题,那些被称为环境变量。 在Windows上,您可以使用Windows API函数GetEnvironmentVariable来获取%username%(文档可以在这里找到:https://msdn.microsoft.com/en-us/library/ms683187(VS.85).aspx)。

使用示例:

#include <Windows.h>

...

const DWORD buf_size = 128;
TCHAR buf[buf_size];
GetEnvironmentVariable ("USERNAME", buf, buf_size);

答案 1 :(得分:1)

我几周前在stackoverflow找到了这个地方:

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <lmcons.h>


using namespace std;

int main()
{
    TCHAR UserName[UNLEN + 1];
    DWORD Size = UNLEN + 1;

    GetUserName((TCHAR*)UserName, &Size);
    wcout << UserName;

    int i;
    cin >> i;
}