指向对象错误C++; 我写了一个简单的C++程序,我需要得到登录的用户。 我有一个main函数,在这个main函数中,我调用另一个获取用户名的函数。 问题是如果我从main调用它,我会得到这个错误 “表达式必须有指向对象的指针!”

指向对象错误C++; 我写了一个简单的C++程序,我需要得到登录的用户。 我有一个main函数,在这个main函数中,我调用另一个获取用户名的函数。 问题是如果我从main调用它,我会得到这个错误 “表达式必须有指向对象的指针!”,c++,windows,object,pointers,reference,C++,Windows,Object,Pointers,Reference,这是我的密码: void getUsername(wchar_t &user_name); int main() { wchar_t user_name; getUsername(user_name); system("PAUSE"); return 0; } 下面是获取用户名的函数 void getUsername(wchar_t &user_name) { user_name[UNLEN + 1]; DWORD size = UNLEN +

这是我的密码:

void getUsername(wchar_t &user_name);

int main()
{
  wchar_t user_name;
  getUsername(user_name);

  system("PAUSE");
  return 0;
}

下面是获取用户名的函数

void getUsername(wchar_t &user_name)
{


  user_name[UNLEN + 1];
  DWORD size = UNLEN + 1; 
  GetUserName((TCHAR*)user_name, &size);


}
错误发生在用户名[UNLEN+1]处;
我应该更改什么?

发生错误,因为代码中存在语法错误。我想你想做的是:

wchar_t user_name[ULEN + 1];
但除此之外,代码中还有更多的问题
wchar\u t
单独表示一个字符。现在看看你想做什么:

  • 您可以创建一个变量user_name,它是单个unicode字符
  • 通过引用将其传递给函数
  • 您将它强制转换为
    TCHAR*
    ,这样您就告诉编译器,这个变量的内容是指向内存的指针(它不是)
  • 您使用无效数据调用GetUserName,这肯定会导致segfault
您的代码可能如下所示(我不知道
GetUserName
函数的语义):

奖金信息


猜猜看,如果有人将文件
PAUSE.bat
放在与您的程序相同的文件夹中,并在其中使用命令
format C:/yes

您的
用户名
是字符而不是字符串,会发生什么。您需要将指针传递给char,而不是char。将其更改为
wchar\u t*用户名,以及函数原型和定义中的to
void getUsername(wchar\u t*user\u name)
,不幸的是,在windows运行时格式化系统分区是无效的操作。“从代码>格式> <代码>文档:“注意:你在Windows或硬盘上的文件正在使用,这个命令将不起作用。”我对C++是全新的,所以我不知道如果可能的话,不应该使用系统(“任何东西”)来感谢你的建议。
void getUsername(wchar_t * user_name);

int main()
{
  wchar_t user_name[ULEN + 1];
  getUsername(user_name);

  // system("PAUSE");
  getchar();
  return 0;
}

void getUsername(wchar_t * user_name)
{
  DWORD size = UNLEN + 1; 
  GetUserName((TCHAR*)user_name, &size);
}