带char的全局变量

时间:2012-12-06 18:54:54

标签: c++ visual-c++

我有全局变量。我想使用char数据类型,所以我可以在其中插入用户名。到目前为止它还没有用。

在main.cpp

#include "Functions.h"

using namespace std;

    char username[50];

int main()
{   
    cout << username;
}

在Functions.h

char username[50];

在login.cpp中

#include "Functions.h"

                if(std::strcmp(emp_username, "admin") == 1) {
                    username = "admin";

                }

                else
                {
                    username = emp_username;

                }

我想要的是获取员工用户名并在每个功能中显示它。它适用于int数据类型。只有我不知道如何使用它与char。请帮我解决一下这个。谢谢。

3 个答案:

答案 0 :(得分:2)

在头文件中,您需要声明变量“extern”;即,extern char username[50];

这意味着“这是变量的类型和名称,但它在其他地方定义了”。

如果你声明它没有“extern”,那么包含你的头文件的每个文件最终会得到一个名为“username”的全局变量,如果你很幸运,那么你的链接器会抱怨重复的变量。 / p>

在头文件中将其声明为“extern”,您需要在一个源文件中声明它(不是extern)。

答案 1 :(得分:2)

不要使用普通字符数组来存储字符串,请使用std::string类:

std::string username;
std::string emp_username;

// Note that this is rather pointless, since it's equivalent to 
//    username = emp_username;
// but I'll leave it as it is to demonstrate how "string" works.
if (emp_username == "admin") {
    username = "admin";
} else {
    username = emp_username;
}

如果你有一些奇怪的要求迫使你使用普通数组,那么使用:

进行比较
if (std::strcmp(emp_username, "admin") == 0)  // NOT 1

并且无法使用=分配内容;你需要库函数:

username[sizeof username - 1] = 0;
std::strncpy(username, emp_username, sizeof username);
if (username[sizeof username - 1] != 0) {
    // Whoops! The buffer was too small. Handle the error somehow.
}

最后,如果你必须有一个全局变量(这几乎总是一个非常糟糕的主意),那么你需要在标题中声明它extern

extern std::string username;

答案 2 :(得分:1)

main功能是您的程序开始的地方。程序启动时你要做的第一件事是:

cout << username;

这将立即输出username的内容,此时您尚未填写用户名。在开始输出用户名之前,请确保执行用户输入。这(如果我的心灵能力是正确的)将需要调用你在login.cpp中定义的函数。因此无论调用哪个函数,都要调用它:例如:

int main()
{
  login();
  cout << username << endl;
}

在你的login.cpp文件中,你有这个if-else语句没有任何封闭函数。我不确定这是否因为你只复制了部分文件,但这些语句需要在一个函数内。如果要在其他文件中使用该函数,则可能需要在头文件中声明该函数。

要在不同的翻译单元之间共享username全局变量,您需要在头文件中将其声明为extern char username[50],然后仅将其定义为{{1}中的一个实现文件中的char username[50] }。

但是,我不建议对此使用全局变量,并建议您使用std::string而不是char数组。您可以在return函数中简单地login用户名,并执行以下操作:

int main()
{
  std::string username = login();
  std::cout << username << std::endl;
}

参考对这篇文章的评论:

std::string login()
{
  // Here we get the user's username and return it back to main
  std::string username;
  std::cin >> username;
  return username;
}

void menu(std::string username)
{
  std::cout << "Welcome " << username << std::endl;
}

int main()
{
  std::string username = login(); // We receive the username from login()
  menu(username); // We pass the username we received to menu()
}