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