说我有以下声明的变量:
char mychararray[35];
我希望将数组中的每个字符都设置为空格... 我怎么能这样做?
我的导师告诉我,所有我必须做的就是
mychararray = "";
但这根本不起作用......
我使用的是过时版本的Visual Studio(2012),还是这只是一个糟糕的初始化?如果是后者,请说明如何使所有字符成为空白。
提前致谢!
答案 0 :(得分:4)
您可以按照教师在声明数组时建议的方式对其进行初始化:
char mychararray[35] = "";
它会将数组设置为空字符串。
如果您想稍后将其设为空字符串,则可以执行
mychararray[0] = '\0';
如果你想让它成为一个由34个空格组成的数组(第35个字符是空终止符),那么
memset(mychararray, ' ', 34);
mychararray[34] = '\0';
答案 1 :(得分:4)
这不是初始化,而是它的分配。要在声明数组时初始化数组,可以写:
char mychararray[35] = "";
如果您已经有一个数组并希望将其设置为零,则可以使用std::fill
:
#include <algorithm>
#include <iterator>
int main()
{
char c[35] = "Hello, world!";
std::fill(std::begin(c), std::end(c), '\0');
// c will contain only zeros now.
}
但是,C风格的数组在现代C ++中并不常用。如果您需要在编译时知道大小,请使用std::string
(您可以使用clear()
成员函数清除)或std::array<char, N>
。
答案 2 :(得分:3)
虽然你可以使用std::fill_n(array, 35, ' ')
,但你最好使用std::string
,它是C ++中首选的字符串类。不必关心零终止或任何事情。
std::string blanks(35, ' ');
答案 3 :(得分:2)
std::memset
是你的朋友。
memset(mychararray, ' ', 34);
mychararray[34]='\0';
如果您要初始化所有元素为'\0'
的数组,那么您可以通过aggregate initialization进行更简洁的处理:
char mychararray[35] = {};
答案 4 :(得分:0)
C ++没有初始化char
到' '
(其ascii值为0x20,顺便说一句);实际上,数组初始化没有指定用于初始化的内容不一定会发生(本地作用域中的数组未被初始化)。