mkdir变量类型C++
mkdir variable type 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);`
如果您在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;
}
- ArduinoJson 6.15.2:JsonObject没有命名类型
- 防止主数据类型C++的隐式转换
- 大量序列中核苷酸类型的快速计数
- 如何从C++中的依赖类型中获得它所依赖的类型
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 是否可以初始化不可复制类型的成员变量(或基类)
- 如何获取std::result_of函数的返回类型
- 从父命名空间重载类型
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 我想将一个对T类型的非常量左值引用绑定到一个T类型的临时值
- Openssl 1.1.1d无效使用不完整的类型"struct dsa_st"
- 访问者访问变体并返回不同类型时出错
- 在VS2010-VS2015下编译时,如何使用decltype作为较大类型表达式的LHS
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- C++ 雷神库 - 使用资源加载器类时出现问题(不命名类型)
- 模板元程序查找相似的连续类型名称
- 是否可以从int转换为enum类类型
- 构造函数正在调用一个使用当前类类型的函数
- 我应该使用什么来代替void作为变体中的替代类型之一
- 类中的字符串不命名类型