【问题标题】:Pointer to object error C++指向对象错误 C++ 的指针
【发布时间】:2014-02-19 09:08:34
【问题描述】:

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

这是我的代码:

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]; 我应该改变什么?

【问题讨论】:

  • 您的user_name 是字符而不是字符串。您需要将指针传递给char,而不是char。在声明中改为wchar_t * user_name;,在函数原型和定义中改为void getUsername(wchar_t * user_name)

标签: c++ windows object pointers reference


【解决方案1】:

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

wchar_t user_name[ULEN + 1];

但除此之外,您的代码中还有更多问题。 wchar_t 单独代表一个字符。现在看看你要做什么:

  • 您创建了一个变量 user_name,它是单个 unicode 字符
  • 您将它传递给函数通过引用
  • 你把它转换成TCHAR*,所以你告诉编译器,这个变量的contents一个指向内存的指针(它不是)
  • 你用无效数据调用GetUserName,肯定会导致segfault。

您的代码可能应该如下所示(我不知道 GetUserName 函数的语义):

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);
}

奖金信息

猜猜,如果有人将文件PAUSE.bat 放在与您的程序相同的文件夹中,并在其中包含命令format C: /yes,会发生什么?

【讨论】:

  • 不幸的是,在 windows 运行时格式化系统分区是无效的操作。来自format 文档的引用:“注意:您在 Windows 中或硬盘驱动器上的文件正在使用中,此命令将不起作用。”
  • 我是 C++ 的新手,所以我不知道(如果可能的话)不应该使用 system("anything") 谢谢你的建议
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-06-24
  • 2016-09-25
  • 2011-12-18
  • 1970-01-01
  • 1970-01-01
  • 2014-04-12
  • 1970-01-01
相关资源
最近更新 更多