1

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

5 回答 5

2

如果您使用 C++,请学习使用std::string. 它是一个内置的字符串类型,可以const char*通过调用转换为 a 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);
于 2013-02-05T21:18:04.900 回答
1

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

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

事实上,它需要 aconst char*作为路径名。在 C++ 中,您经常处理std::string而不是低级别char*的 C。您可以将两者都用作“字符串”,但它们不可互换。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++ 字符串转换为 C 的const char*

于 2013-02-05T21:22:01.573 回答
1
int createaccount(const char acc_name)
{
     int status = mkdir("/home/person/Desktop/Accounts/" + acc_name, S_IRWXU);
     return 0;
}

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

于 2013-02-05T21:20:51.143 回答
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;
}
于 2013-02-05T21:19:19.080 回答
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;
}
于 2013-02-05T21:19:34.900 回答