我想一個int轉換爲一個CString。我決定通過stringstream將int讀入常規字符串,然後將字符串讀入char數組。以下似乎工作,但我想知道如果我只是幸運地與我的編譯器。代碼看起來好聽嗎?謝謝!將字符串轉換到C風格的字符串
int zip = 1234;
char zipString[30];
stringstream str;
str << zip;
str >> zipString;
cout << zipString;
我想一個int轉換爲一個CString。我決定通過stringstream將int讀入常規字符串,然後將字符串讀入char數組。以下似乎工作,但我想知道如果我只是幸運地與我的編譯器。代碼看起來好聽嗎?謝謝!將字符串轉換到C風格的字符串
int zip = 1234;
char zipString[30];
stringstream str;
str << zip;
str >> zipString;
cout << zipString;
您可以從流的str()
功能得到了C++ std::string
,並從字符串的c_str()
功能的不可變的C風格的0結尾的字符串:
std::string cpp_string = str.str();
char const * c_string = cpp_string.c_str();
你可能想將這些組合成單個表達式,str.str().c_str()
,但那將是錯誤;在你用指針做任何事情之前,C++字符串將被銷燬。
你在做什麼都可以工作,只要你確定緩衝區足夠大;但使用C++字符串消除了溢出緩衝區的危險。一般來說,除非需要使用需要它們的API(或者在極端情況下,作爲避免內存分配的優化),否則最好避免使用C風格的字符串。 std::string
通常更安全,更易於使用。
謝謝!出於好奇,你會建議不要做我所做的事嗎? – AlmostSurely
你是對的!我想'stringstream.str()''返回的std :: string&','不是的std :: string' :) – dasblinkenlight
@IniquiTrance:一般來說,我會建議使用'的std :: string'字符串,除非有令人信服的理由使用別的東西。 –
std::string
的c_str()
成員函數返回const char*
(又名C風格的字符串)。
std::string str = "world";
printf("hello, %s", str.c_str());
除非你有一個特定的原因,你需要一個字符數組而不是標準字符串,我會使用後者。雖然這不是絕對必要在這種情況下,我還通常使用升壓lexical_cast
,而不是明確地搬東西通過一個字符串流來進行轉換:
std::string zipString = lexical_cast<std::string>(zip);
然後,如果你真的需要的結果作爲C-樣式字符串,你可以使用zipString.c_str()
來獲得(雖然它仍然以不同的方式 - 你不能修改返回的內容)。
在這種特定的情況下,它不會獲得你很多,但是這一般順序對轉換統一使用增加了,如果你要做到這一點,你還不如在這裏使用它。
你獲得快速失敗的行爲,這是很多。我從來沒有見過整個組織檢查流的失敗位一致(包括@IniquiTrance)。 –
@TomKerr:好點。 –
更好地推動這一問題http://codereview.stackexchange.com/ – ArtemStorozhuk
你需要有字符串作爲C-字符串,而不是一個'的std :: string'任何理由嗎?後者通常是一個更好的選擇,除非你被傳統代碼所束縛。 –
我需要獨立處理字符串中的每個'整數'。看起來像一個數組可以讓我選擇它們以便最簡單。 – AlmostSurely