指向对象错误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*用户名声明中的code>,以及函数原型和定义中的tovoid 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);
}