2012-04-30 16 views
6

Quiero una cadena de terminación NULL ('\ 0') de 20 caracteres llena de espacios en blanco.inicialización de matriz de caracteres con espacios

Actualmente lo estoy haciendo en la siguiente forma

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

foo[num_space_req] = '\0'; 

¿Hay una mejor manera para arriba?

+5

'std :: relleno (foo, foo + num_space_req, ' ');' – chris

+4

Por favor trate de evitar las preguntas de marcado tanto con C y C++ a menos que _really_ necesita una solución entre lenguajes. Son muy diferentes idiomas una vez que eliminas todas las cosas heredadas de C que los codificadores de C++ no deberían usar de todos modos :-) – paxdiablo

+0

Has recibido muchas buenas respuestas. Es posible que desee aceptar uno de ellos. – octopusgrabbus

Respuesta

6
std::string foo(num_space_req,' '); 
15

Puede utilizar el siguiente para inicializar la matriz de espacios:

memset(foo, ' ', num_space_req); 
foo[num_space_req] = '\0'; 
+1

Downvoter: ¿me gustaría comentar? –

+0

No he votado negativamente, pero usar memset no sería mi primera opción. – bames53

+0

@ bames53: Dado que esta pregunta está etiquetada (entre otras cosas) como C, ¿qué elegirías? –

0

memset podría ser mejor optimizado que su bucle, podría ser exactamente la misma. escoger uno de:

memset(foo, ' ', sizeof(foo) -1); 
memset(foo, ' ', 19); 
memset(foo, ' ', 19 * sizeof(char)); 
0
#include <cstring> 
void makespace(char *foo, size_t size) { 
    memset((void*)&foo, ' ', size - 1); 
    foo[size] = 0; 
} 
// ... 
makespace(foo, 20); 
5

Dado que la cuestión tiene una etiqueta C++, la forma idiomática sería:

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

Tenga en cuenta que no funciona en C.

+0

una buena llamada que trae el modismo de C++, pero ¿no es esta respuesta incompleta ya que no coloca un terminador nulo? – feuGene

1

Como dijo @OliCharlesworth, la mejor manera es usar memset:

char bla[20]; 

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

Nótese que en GNU C, también se puede utilizar la siguiente extensión (rango inicializadores designados):

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

Si desea que la matriz inicializado en tiempo de compilación, puede modificar su declaración de carbón foo[20]; como sigue:

char foo[20] = {0x20};

Si necesita inicializar la matriz de espacios en tiempo de ejecución, a continuación, puede utilizar el siguiente:

memset(foo, ' ', sizeof(foo) -1); 
foo[20] = '\0'; 
Cuestiones relacionadas