2013-02-05 54 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*