所以我只想从命令行变量%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,这会对任何事情产生影响吗?
答案 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;
}