空白で満たされた 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';
上記のより良い方法はありますか?
以下を使用して、配列をスペースに初期化できます。
memset(foo, ' ', num_space_req);
foo[num_space_req] = '\0';
std::string foo(num_space_req,' ');
質問には C++ タグがあるため、慣用的な方法は次のようになります。
std::fill(foo, foo + num_space_req, ' ');
// or
std::fill_n(foo, num_space_req, ' ');
C では動作しないことに注意してください。
そんな用途に使えますmemset
。
memset (foo, ' ', num_space_req)
@OliCharlesworthが言ったように、最良の方法は次を使用することmemset
です:
char bla[20];
memset(bla, ' ', sizeof bla - 1);
bla[sizeof bla - 1] = '\0';
GNU C では、次の拡張 (範囲指定初期化子) も使用できることに注意してください。
char bla[20] = {[0 ... 18] = ' ', [19] = '\0'};
コンパイル時に配列を初期化する場合は、foo[20];
次のように char 宣言を変更できます。
char foo[20] = {0x20};
実行時に配列をスペースに初期化する必要がある場合は、次を使用できます。
memset(foo, ' ', sizeof(foo) -1);
foo[20] = '\0';
memset は for ループよりも最適化されている可能性があり、まったく同じである可能性があります。次のいずれかを選択します。
memset( foo, ' ', sizeof(foo) -1 );
memset( foo, ' ', 19 );
memset( foo, ' ', 19 * sizeof(char) );
#include <cstring>
void makespace(char *foo, size_t size) {
memset((void*)&foo, ' ', size - 1);
foo[size] = 0;
}
// ...
makespace(foo, 20);