Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-使用相同字符创建特定大小的以null结尾的c样式字符串的更好方法_C++_String_Fill - Fatal编程技术网

C++ C++;-使用相同字符创建特定大小的以null结尾的c样式字符串的更好方法

C++ C++;-使用相同字符创建特定大小的以null结尾的c样式字符串的更好方法,c++,string,fill,C++,String,Fill,我希望创建一个以null结尾的c样式字符串,其中每个字符都是-(连字符)。我正在使用以下代码块: 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_st

我希望创建一个以null结尾的
c样式字符串
,其中每个字符都是
-
(连字符)。我正在使用以下代码块:

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';
请忽略关于尺寸的问题

有没有更聪明的C++方法来做这个?< /P> 当然,可以使用

std::string
来执行以下操作:

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

有没有更聪明的C++方法来做这个?< /P> 当然,可以使用

std::string
来执行以下操作:

std::string s(n,'-');
const char* cstyle = s.c_str();
< P > 1)有更聪明的C++方法来做这个吗?< /P> 使用字符串类:

std::string output_str(n,'-');
以防您需要旧C样式的字符串

output_str.c_str(); // Returns a const char*
2) 当我打印字符串的大小时,输出是n,而不是n+1。我是否做错了什么,或者空字符从未计算在内

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

< P > 1)有更聪明的C++方法来做这个吗?< /P> 使用字符串类:

std::string output_str(n,'-');
以防您需要旧C样式的字符串

output_str.c_str(); // Returns a const char*
2) 当我打印字符串的大小时,输出是n,而不是n+1。我是否做错了什么,或者空字符从未计算在内


在代码中,不添加N字符。如果数组预先填充了0,则STRLN函数将返回N.< /P> <代码> OutPuthStru[n+1] < /C> >超出界限。VLA的标准不是C++。确保<代码> N<代码>是<代码> CONTXPRP<代码>代码> OutPuthStru[n+1] < /C> >超出界限。VLA不是标准C++。确保
n
constexpr
只是好奇,什么是旧的C?@mvds使用char*作为strings@amchacon对于较新的c标准来说,这并没有改变。只是好奇,旧的c是什么?@mvds使用char*表示strings@amchacon对于较新的c标准来说,这一点还没有改变。作为奖励,一些(但不是全部)实现使用,这意味着此代码可以将其所有数据存储在堆栈上(对于足够小的
n
),就像您问题中的代码一样!作为奖励,一些(但不是所有)实现使用,这意味着此代码可能会将其所有数据存储在堆栈上(对于足够小的
n
),就像您问题中的代码一样!