2

我正在使用此模板将我的更改std::array为字符串。为什么不打印任何东西?

#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;
}
4

2 回答 2

8

您正在创建一个数值介于 1 和 16 之间的字符数组。这些是非打印字符,因此您应该看不到任何内容。

尝试将它们的值更改为确实显示的字符,例如“A”,看看这是否能解决问题。

希望这可以帮助!

于 2013-06-19T23:42:18.753 回答
4

是什么让你认为它没有打印出任何东西?我猜它确实会从您的原始数组中打印出带有 ACSII 代码的字符,但它们恰好对应于您平台上的“不可见”字符,即屏幕上没有由可见字形表示的字符。

您可以将程序的输出重定向到一个文件,然后在十六进制编辑器中打开该文件。我相信您会立即在该文件中发现您的字符代码序列。

于 2013-06-20T00:04:18.243 回答