我想要一个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';
上面有更好的方法吗?
答案 0 :(得分:16)
您可以使用以下内容将数组初始化为空格:
memset(foo, ' ', num_space_req);
foo[num_space_req] = '\0';
答案 1 :(得分:6)
std::string foo(num_space_req,' ');
答案 2 :(得分:5)
由于问题有C ++标记,因此惯用法是:
std::fill(foo, foo + num_space_req, ' ');
// or
std::fill_n(foo, num_space_req, ' ');
请注意,它在C中不起作用。
答案 3 :(得分:2)
您可以将memset
用于此类事情。
memset (foo, ' ', num_space_req)
答案 4 :(得分:1)
正如@OliCharlesworth所述,最好的方法是使用memset
:
char bla[20];
memset(bla, ' ', sizeof bla - 1);
bla[sizeof bla - 1] = '\0';
请注意,在GNU C中,您还可以使用以下扩展名(范围指定的初始值设定项):
char bla[20] = {[0 ... 18] = ' ', [19] = '\0'};
答案 5 :(得分:1)
如果要在编译时初始化数组,可以按如下方式修改char foo[20];
声明:
char foo[20] = {0x20};
如果需要在运行时将数组初始化为空格,则可以使用以下命令:
memset(foo, ' ', sizeof(foo) -1);
foo[20] = '\0';
答案 6 :(得分:0)
memset可能比你的for循环更好地优化,它可能完全相同。 选择以下之一:
memset( foo, ' ', sizeof(foo) -1 );
memset( foo, ' ', 19 );
memset( foo, ' ', 19 * sizeof(char) );
答案 7 :(得分:0)
#include <cstring>
void makespace(char *foo, size_t size) {
memset((void*)&foo, ' ', size - 1);
foo[size] = 0;
}
// ...
makespace(foo, 20);