2013-06-19 20 views
2

我正在使用此模板將我的std::array更改爲字符串。爲什麼不打印出任何東西?爲什麼不將std ::數組轉換爲std :: string的代碼不會顯示任何內容?

#include <iostream> 
#include <string> 
#include <array> 

template<std::size_t N> 
std::string to_string_2(std::array<char, N> const& arr) { 
    const char* str = reinterpret_cast<const char*>(arr.data()); 
    return std::string(str, str+N); 
} 
int main() 
{ 
    std::array<char, 16> state = {1,2,3,4,5,6,7,8,9,0,11,12,13,14,15,0}; 
    std::cout << to_string_2(state) << std::endl; 
} 
+0

std :: tr1 ::數組與std :: array相同嗎? –

+0

所以'1'應該轉換爲''1'','15'應該轉換爲...? – mfontanini

+0

@JamesBlack,這是它的前身。 'std :: tr1 :: array'被實現了,而C++ 11仍然對它進行了最後的修改。當C++ 11完成時,它被提升爲'std'。我們有TR2來與C + + 14。 – chris

回答

8

您正在創建一個數字值在1到16之間的字符數組。這些是非打印字符,所以您不應該看到任何內容。

嘗試改變他們的價值觀到做顯示,像「A」字符,看看是否能解決問題。

希望這會有所幫助!

4

是什麼讓你覺得它不會打印出什麼?我猜想它會打印出原始數組中ACSII代碼的字符,但它們恰好對應於您平臺上的「不可見」字符,即對應於屏幕上不可見字形所代表的字符。

您可將你的程序的輸出到一個文件,然後打開一個十六進制編輯器該文件。我相信你會立即在那個文件中發現你的字符代碼序列。

+1

+1。 './example | hexdump -vC'通常很有啓發性。 –

相關問題