2009-02-21 32 views

回答

1

我不會說這是慣用的,因爲我從來沒有在任何C++代碼中看到它,但是您可以使用C++字符串流和C預處理器字符串粘貼將多行字符串視爲輸入流:

#include <sstream> 
#include <iostream> 

using namespace std; 

const string data = 
    "once upon a time, " \ 
    "a young lass called Goldilocks\n" \ 
    "went for a walk in the forest.\n"; 

int main() 
{ 
    istringstream in (data); 

    for (string line; getline(in, line);) 
     cout << line << endl; 

    return 0; 
} 
+0

我認爲你應該把getline放在while條件本身中。即使在字符串末尾的getline失敗時,循環也會打印'line'。 – 2009-02-21 14:12:47

5

你的意思是將文件包含在程序中?

不,C++不能這樣做。與Perl不同。有許多工具會將二進制或文本文件作爲C/C++源代碼打包。他們最終成爲全球陣營。

我總是發現有用的一件事是打開隨機存儲器作爲文件句柄的能力,這與您似乎要求的類似。在標準C++中,這可以通過isstreamstream類來完成,該類與ifstream具有相同的接口。

但是,您的問題的上下文可能意味着有更好的方式來完成您在C/C++中的想法。需要更多信息。

+0

如果數據位於靜態(模塊範圍)字符串中,則可以使用stringstream來讀取它。 – Richard 2009-02-21 10:55:05

2

C++沒有這樣做的慣用方法。改爲使用單獨的數據文件。

根據您的平臺,您可能希望使用資源來獲得類似的結果,但這超出了C++的範圍。特別是,要將資源存儲在二進制文件中,您需要使用外部工具並在代碼中讀取這些資源,以便調用平臺API。例如在Windows下,有LoadResource函數(和相關的)。