mkdir变量类型C ++

时间:2013-02-05 21:14:16

标签: c++

这是我试图用C ++创建的程序的一部分 自从使用C ++开始以来,我遇到了不同变量类型的问题。 函数mkdir需要const char我相信并且我不确定如何将正确的变量从输入转换为我需要的。

所有变量和包含都在程序中。这是我唯一的问题。

我可能不是最具体的问题,但我是C ++的新手,感谢任何帮助,谢谢!

int createaccount(const char acc_name)
{
     int status = mkdir("/home/person/Desktop/Accounts/" + acc_name, S_IRWXU);
     return 0;
}

std::string new_acc_name;
cin >> new_acc_name;
new_acc_namechar = str.new_acc_namechar_str();
createaccount(new_acc_namechar);`

5 个答案:

答案 0 :(得分:2)

如果您使用的是C ++,请学会使用std::string。它是一种内置字符串类型,可以通过调用const char*将其转换为c_str()。通常情况下,您将始终存储并传递std::string个对象,除非您需要与需要const char*的内容进行交互。此时请致电c_str()。例如:

int createaccount(const std::string& acc_name)
{
     std::string path = "/home/person/Desktop/Accounts/" + acc_name;
     int status = mkdir(path.c_str(), S_IRWXU);
     return 0;
}

在猜测你的代码尝试做什么之后:

std::string new_acc_name;
cin >> new_acc_name;
createaccount(new_acc_namechar);

答案 1 :(得分:1)

int createaccount(const char acc_name)
{
     int status = mkdir("/home/person/Desktop/Accounts/" + acc_name, S_IRWXU);
     return 0;
}

在此函数中,您不能仅使用const char*运算符连接char+。相反,您应该使用int status = mkdir (string(string("/home/person/Desktop/Accounts/")+acc_name).c_str(), S_IRWXU);

答案 2 :(得分:1)

mkdir()是一个声明为(根据man 2 mkdir)的libc函数:

int mkdir(const char *pathname, mode_t mode);

确实如此,它需要const char*作为路径名。 在C ++中,您经常处理std::string而不是C的低级char*。您可以将它们用作“字符串”,但它们不可互换。 std :: string支持很好的东西,比如用+运算符连接字符串等等。

在您的示例中,您使用+来连接“字符串”,但您的字符串实际上是char数组,所以您不能简单地将它们连接起来。

一个简单的解决方案是:

int createaccount(const std::string&filename) {
   std::string path="/home/person/Desktop/Accounts/";
   std::string fullname=path+filename;
   int status = mkdir(fullname.c_str(), S_IRWXU); 
   return 0;
} 

使用std :: string进行连接,使用std :: string的c_str()成员函数将C ++ - string转换为C const char*

答案 3 :(得分:0)

我认为你想要的是:

int createaccount(const char acc_name) {
    std::string combinedPath = "/home/person/Desktop/Accounts" + acc_name;
    int status = mkdir(combinedPath.c_str(), S_IRWXU);
    return status;
}

答案 4 :(得分:0)

"/home/person/Desktop/Accounts/" + acc_name这是将acc_name(单个字符)添加到字符串文字"/home/person/Desktop/Accounts/"的地址。你想做这样的事情。

int createaccount(const char acc_name)
{
  std::string dir = "/home/person/Desktop/Accounts/";
  dir += acc_name;
  int status = mkdir(dir.c_str(), S_IRWXU);
  return 0;
}