9

我想要一个用空格填充的 20 个字符的 NULL('\0') 终止字符串。

目前我正在按照以下方式进行操作

char foo[20];  
for (i = 0; i < num_space_req; i++)        //num_space_req < 20  
{  
    foo[i] = ' ';  
}

foo[num_space_req] = '\0';

上面有没有更好的方法?

4

8 回答 8

18

您可以使用以下内容将数组初始化为空格:

memset(foo, ' ', num_space_req);
foo[num_space_req] = '\0';
于 2012-04-30T13:39:32.207 回答
7
std::string foo(num_space_req,' ');
于 2012-04-30T13:46:19.367 回答
6

由于问题有一个 C++ 标签,惯用的方法是:

std::fill(foo, foo + num_space_req, ' ');
// or
std::fill_n(foo, num_space_req, ' ');

请注意,它在 C 中不起作用。

于 2012-04-30T13:44:29.397 回答
2

你可以用memset这种东西。

memset (foo, ' ', num_space_req)

http://www.cplusplus.com/reference/clibrary/cstring/memset/

于 2012-04-30T13:40:52.047 回答
2

正如@OliCharlesworth所说,最好的方法是使用memset

char bla[20];

memset(bla, ' ', sizeof bla - 1);
bla[sizeof bla - 1] = '\0';

请注意,在 GNU C 中,您还可以使用以下扩展(范围指定初始值设定项):

char bla[20] = {[0 ... 18] = ' ', [19] = '\0'};
于 2012-04-30T13:44:58.117 回答
1

如果你想在编译时初始化数组,你可以修改你的 charfoo[20];声明如下:

char foo[20] = {0x20};

如果您需要在运行时将数组初始化为空格,则可以使用以下内容:

memset(foo, ' ', sizeof(foo) -1);
foo[20] = '\0';
于 2012-04-30T16:08:07.333 回答
0

memset 可能比您的 for 循环更好地优化,它可能完全相同。选择以下之一:

memset( foo, ' ', sizeof(foo) -1 );
memset( foo, ' ', 19 );
memset( foo, ' ', 19 * sizeof(char) );
于 2012-04-30T13:42:25.823 回答
0
#include <cstring>
void makespace(char *foo, size_t size) {
  memset((void*)&foo, ' ', size - 1);
  foo[size] = 0;
}
// ...
makespace(foo, 20);
于 2012-04-30T13:42:38.353 回答