2011-10-15 71 views
1

我想變量,字符串值(ofstream的)文件路徑結合結合如何變量與字符串值

例子:

long phNumber; 
char bufPhNumber[20]; 
ofstream ifile; 

cout << "Phone Number: "; 
cin >> phNumber; 
itoa(phNumber,bufPhNumber,20); 

ifile.open("c://" + bufPhNumber + ".txt",ios::out); // error in this line 

如何給這個變量(bufPhNumber)與字符串結合( 「C://」 +變量這裏+ 「.TXT」)

回答

4

這樣做:

ifile.open((std::string("c://") + bufPhNumber + ".txt").c_str(),ios::out); 

說明:

它首先創建一個字符串,以及使用operator+()作爲串接的c-串的其餘部分:

std::string temp = std::string("c://") + bufPhNumber + ".txt"; 

然後採取c_str()並通過這對.open()

ifile.open(temp.c_str(),ios::out); 

但是,在C++ 11中,您不需要執行.c_str(),並且可以直接使用std::string


更好的解決方案應該是這樣的:

std::string phNumber; //declare it as std::string 

cout << "Phone Number: "; 
cin >> phNumber; //read as string 

     //use constructor 
ofstream ifile(("c://" + phNumber + ".txt").c_str(), ios::out); 
+0

你更好的解決方案已在'ofstream'構造函數一個錯字。它仍然是'bufPHNumber'。 – pmr

+0

@pmr:固定。謝謝。 :-) – Nawaz

+0

@Nawaz:謝謝您的回答,但是這不是我想要的,我想用int值並將其轉換爲char,然後在文件路徑中使用它,我不希望使用字符串類型,而不是整型或長 –

1

ofstream::open,至少前C++ 11 的(a),需要const char *爲文件名,而不是一個std::string,按照here

相反的:以下

ifile.open("c://" + bufPhNumber + ".txt",ios::out); 

使用:

string fspec = std::string ("c://") + bufPhNumber + ".txt"; 
ifile.open (fspec.c_str(), ios::out); 

(你可能要考慮爲什麼你輸出文件稱爲ifile)。


的(a)在C++ 11,有 open功能basic_ofstream

void open(const char* s, ios_base::openmode mode = ios_base::out); 
void open(const string& s, ios_base::openmode mode = ios_base::out); 

所以string版本將在那裏工作。

+0

不適用於C++ 11 ... – rubenvb

+0

@rubenvb:好點。我更新了答案以涵蓋這一點。謝謝。 – paxdiablo

+0

paxdiablo:一個新的標準,提供這麼多有用的便利設施不應該去未公開:) – rubenvb

-1

好的,嗨。您無法連接字符串直接像Java,所以您的問題是在這裏:

bufPhNumber + 「.TXT」

鑑於bufPhNumber是一個char *和文字是一個char *,他們不不按照你打算的方式支持+運營商。

有這樣的工作的strcat(),但它假定目標字符串有足夠的空間目標字符串,並且它還會修改目標字符串。

char Array[28]; //One for the null 
strcat(Array,"C:\\"); 
strcat(Array,bufPhNumber); 
strcat(Array,".txt"); 

雖然我建議使用電話號碼字符數組,只要不是非常適合此類存儲的,只要你喜歡(你可以考慮使用兩個整數/多頭),它不能持有儘可能多的數字。另外,考慮使用unsigned long(因爲你沒有得到負面的電話號碼)。如果你使用long/int,注意從long到char數組和char數組到long的轉換將佔用大量的內存和處理能力,這在更大的範圍內比使用char數組效率低。

+0

錯誤答案。這是一個關於C++而不是C的問題,你可以完美地將'std :: string's「像Java一樣」連接起來。你不能用簡單的'char'指針來做到這一點。 –

+0

@ChristianRau:我有正確答案,如字符串我指的是燒焦的字符串(注意複數形式),而不是的std :: string(我總是以STD表示::區分)。注意短語'Given bufPhNumber是一個char *,文本是一個char *,它們不支持+運算符。 **他的代碼中沒有涉及std :: strings **。請在上下文中表示(Java使用字符數組來操作,就像字符串一樣,C++不會)。 – SSight3

+0

答案或許只能算是在它工作在C++中是正確的,但它絕對是一個C答案(或可能是C/C++的答案,不讓它更好)。在C++中,char數組用作char數組,但絕對不是字符串,OP可能使用的任何奇怪的方言。你的回答只是走錯了方向,向他解釋如何連接char數組,而不是如何將char數組轉換爲字符串。 –