2013-02-05 57 views
0

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

所有变量和所需的内容都在程序中。这是我唯一的问题。

我可能不是我的问题上最具体的,但我是新来的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);` 
+2

什么变量类型是'new_acc_name'? –

+0

new_acc_name是一个字符串 – user2044697

+1

“这是我唯一的问题。”......几乎没有:)。你唯一的问题是,你需要学习C++基础知识(不幸的是包含C基础知识)。 – hyde

回答

2

如果你在C++中工作,学习使用std::string。它是一个内置的字符串类型,可以通过调用c_str()将其转换为const char*。通常情况下,除非需要与需要const char*的内容进行交互,否则所有时间都会存储并传递std::string对象。在此时致电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); 
+0

谢谢,它的作品!我感谢帮助! – user2044697

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

"/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; 
} 
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);

1

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

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

所以事实上,它需要一个const char*的路径名。 在C++中,您经常使用std::string而不是C的低级别char*,您可以同时使用它们作为“字符串”,但它们不可互换。 std :: string支持像+运算符等多个字符串连接的好东西。

在你的例子中,你使用+连接“字符串”,但你的字符串是真正的字符数组,所以你不能简单地连接它们。

一个简单的解决办法是:

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*