C ++如何将整个字符数组设置为空格?

时间:2015-02-08 18:48:33

标签: c++

说我有以下声明的变量:

char mychararray[35];

我希望将数组中的每个字符都设置为空格... 我怎么能这样做?

我的导师告诉我,所有我必须做的就是

mychararray = "";

但这根本不起作用......

我使用的是过时版本的Visual Studio(2012),还是这只是一个糟糕的初始化?如果是后者,请说明如何使所有字符成为空白。

提前致谢!

5 个答案:

答案 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,顺便说一句);实际上,数组初始化没有指定用于初始化的内容不一定会发生(本地作用域中的数组未被初始化)。