我有一個帶指針的字符範圍(pBegin
和pEnd
)。我認爲它是一個字符串,但它不是\0
終止。我怎樣纔能有效地將它打印到std::cout
?指針間打印文本
- 沒有創建副本,就像
std::string
- 沒有一個循環,打印出的每個字符
我們有好的解決辦法?如果不是,最順暢的解決方法是什麼?
我有一個帶指針的字符範圍(pBegin
和pEnd
)。我認爲它是一個字符串,但它不是\0
終止。我怎樣纔能有效地將它打印到std::cout
?指針間打印文本
std::string
我們有好的解決辦法?如果不是,最順暢的解決方法是什麼?
您可以使用ostream::write,這需要指針和長度參數:如果您需要由需要空終止字符串,一些函數來處理它
std::cout.write(pBegin, pEnd - pBegin);
然後有一個簡單的解決方案
char tmpEnd = pEnd[1]; // backup the after-end character
pEnd[1] = '\0';
dosomething(pBegin); // use it as normal C-style string
pEnd[1] = tmpEnd; // restore the char
當然,您需要確保pEnd[1]
處於入界狀態。例如,如果該字符串被聲明爲char str[MAXLENGTH + 1]
,那麼pEnd
絕對不應該被賦值爲pass &str[MAXLENGTH]
,或者只是在手之前進行檢查。
來自'std :: string(pBegin,pEnd)'的拷貝有什麼問題?這是這樣做的自然方式(並且與實際輸出所花費的時間相比,副本不會被察覺)。 –
答案對我來說非常有用。也許我從最初的問題中轉換了太多的問題,應該詢問'std :: ostream',它可以是'std :: stringstream'。差異可能會計算在內。 – Notinlist