簡體   English   中英

用空格初始化char數組

[英]initializing char array with spaces

我想要一個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)

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

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

char bla[20];

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

請注意,在GNU C中,您還可以使用以下擴展名(范圍指定的初始值設定項):

char bla[20] = {[0 ... 18] = ' ', [19] = '\0'};

如果你想在編譯時初始化數組,你可以修改你的char foo[20]; 聲明如下:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM