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

コンパイル時に配列を初期化する場合は、foo[20];次のように char 宣言を変更できます。

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 に答える