C ++ - 创建具有相同字符的特定大小的空终止c样式字符串的更好方法

时间:2017-08-26 20:42:39

标签: c++ string fill

我希望创建一个空终止的c-style string,其中每个字符都是-(连字符)。我使用以下代码块:

char output_str[n + 1];
std::fill(output_str, output_str + n, '-');
output_str[n + 1] = '\0';

1)这样做是否有更聪明的 C ++方式

2)当我打印字符串的大小时,输出为n,而不是n + 1。我做错了什么或者空字符从未计算过?

修改

请考虑此代码块而不是上面的代码:

char output_str[n + 1];
std::fill(output_str, output_str + n, '-');
output_str[n] = '\0';

请忽略有关尺寸的问题。

2 个答案:

答案 0 :(得分:4)

  

有更聪明的C ++方法吗?

当然,使用std::string来做到这一点:

std::string s(n,'-');
const char* cstyle = s.c_str();

答案 1 :(得分:0)

  

1)有更聪明的C ++方法吗?

使用String类:

std::string output_str(n,'-');

如果您需要旧C风格的字符串

output_str.c_str(); // Returns a const char*
  

2)当我打印字符串的大小时,输出是n,而不是n + 1.我做错了什么或者空字符从未计算过?

在您的代码中,不添加N字符。如果数组预先填充为零,则strlen函数将返回N.