2013-07-12 74 views
2

我有一個帶指針的字符範圍(pBeginpEnd)。我認爲它是一個字符串,但它不是\0終止。我怎樣纔能有效地將它打印到std::cout指針間打印文本

  • 沒有創建副本,就像std::string
  • 沒有一個循環,打印出的每個字符

我們有好的解決辦法?如果不是,最順暢的解決方法是什麼?

+0

來自'std :: string(pBegin,pEnd)'的拷貝有什麼問題?這是這樣做的自然方式(並且與實際輸出所花費的時間相比,副本不會被察覺)。 –

+0

答案對我來說非常有用。也許我從最初的問題中轉換了太多的問題,應該詢問'std :: ostream',它可以是'std :: stringstream'。差異可能會計算在內。 – Notinlist

回答

6

您可以使用ostream::write,這需要指針和長度參數:如果您需要由需要空終止字符串,一些函數來處理它

std::cout.write(pBegin, pEnd - pBegin); 
0

然後有一個簡單的解決方案

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],或者只是在手之前進行檢查。