mkdir变量类型C++

mkdir variable type C++

本文关键字:C++ 类型 变量 mkdir      更新时间:2023-10-16

这是我试图用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);`

如果您在C++中工作,请学习使用std::string。它是一个内置的字符串类型,可以通过调用c_str()转换为const char*。通常情况下,您会一直存储和传递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);
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);

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

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的c_str()成员函数::string将C++字符串转换为C的const char*

我认为您想要的是以下内容:

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

"/home/person/Desktop/Accounts/" + acc_name这是在字符串文字"/home/person/Desktop/Accounts/"的地址中添加acc_name,这是一个单独的字符。你想做这样的事。

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