如何確定C++中的環境換行?谷歌爲C#和.NET產生了許多結果,但我沒有看到任何方式爲非CLI C++做。確定正在編譯C++程序的環境換行字符
附加信息:我需要掃描一個const char*
作爲角色。
通過 「環境換行」 我的意思是\r\n
在Windows上,\n
在Linux上,並\r
在Mac上。
如何確定C++中的環境換行?谷歌爲C#和.NET產生了許多結果,但我沒有看到任何方式爲非CLI C++做。確定正在編譯C++程序的環境換行字符
附加信息:我需要掃描一個const char*
作爲角色。
通過 「環境換行」 我的意思是\r\n
在Windows上,\n
在Linux上,並\r
在Mac上。
std::endl
插入適合系統的換行符。您可以使用
ostringstream
在運行時將換行符序列確定爲字符串。
#include <sstream>
int main()
{
std::ostringstream oss;
oss << std::endl;
std::string thisIsEnvironmentNewline = oss.str();
}
編輯:*明白爲什麼這個可能不會運行下面的評論。
如果你知道你的平臺將被限制到Windows,Mac和Unix的,那麼你可以使用預定義的編譯器宏(listed here),以確定在編譯時的底線序列:
#ifdef _WIN32
#define NEWLINE "\r\n"
#elif defined macintosh // OS 9
#define NEWLINE "\r"
#else
#define NEWLINE "\n" // Mac OS X uses \n
#endif
大多數非Windows和非Apple平臺都是使用\n
的某種Unix變體,因此上述宏應該可以在許多平臺上使用。唉,我不知道在編譯時爲所有可能的平臺確定端點序列的可移植方式。
這是唯一的方法嗎?我寧願在編譯時做它。 –
@Seth:爲什麼在編譯時需要知道換行符的類型? –
@Remy,因爲它在運行時不需要計算:)我可能不得不爲此解決。 –
一般用#define。但是,對於簡單的應用程序,以「文本模式」打開文件將爲您提供所需的內容。
對於C++(和C)中的格式化文本IO,新行字符始終爲'\n'
。如果您想知道給定平臺和文件模式的新行的二進制表示形式,請以所需的模式(例如文本或二進制文件,UTF-8,UTF-16,MCBS等)打開文件,寫出'\n'
,關閉它,以二進制重新打開它,讀入整個文件,並找出'\n'
的實際二進制編碼。您也可能需要考慮end-of-file
角色。
爲什麼輸出「本地」換行符甚至是必要的?我希望人們停止污染世界,給人的印象是「\ r \ n」是Windows上的換行符。幾乎每個窗口上的文本編輯器都會處理「\ n」。我聽說過的唯一反例就是記事本! –
這個問題使我產生了另一種:http://stackoverflow.com/questions/6865398/inserting-endline-into-a-stringstream –
@Andre誰說輸出任何東西? –