2012-04-30 28 views
6

के साथ चार सरणी प्रारंभ करना मुझे सफेद वर्णों से भरे स्ट्रिंग को समाप्त करने वाला 20 वर्ण न्यूल ('\ 0') चाहिए।रिक्त स्थान

वर्तमान में मैं यह निम्नलिखित तरीके

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

foo[num_space_req] = '\0'; 

में कर रहा हूँ वहाँ से ऊपर के लिए एक बेहतर तरीका है?

+5

'std :: भरने (foo, foo + num_space_req, '');' – chris

+4

दोनों सी और सी के साथ टैगिंग सवालों से बचने के लिए ++ जब तक आप _really_ एक क्रॉस-भाषा समाधान की जरूरत है: प्रयास करें। एक बार जब आप सभी विरासत सी चीजों को हटा देते हैं तो वे _vastly_ अलग-अलग भाषाएं हैं जिन्हें सी ++ कोडर का उपयोग नहीं किया जाना चाहिए :-) – paxdiablo

+0

आपको बहुत अच्छे उत्तर मिल गए हैं। आप उनमें से एक को स्वीकार करना चाहेंगे। – octopusgrabbus

उत्तर

15

आप रिक्तियों के लिए सरणी प्रारंभ करने में निम्न का उपयोग कर सकते हैं:

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

डाउनवॉटर: टिप्पणी करने की देखभाल? –

+0

मैंने डाउनवोट नहीं किया, लेकिन मेमसेट का उपयोग करना मेरी पहली पसंद नहीं होगी। – bames53

+0

@ bames53: यह देखते हुए कि यह प्रश्न टैग किया गया है (अन्य चीजों के साथ) सी के रूप में, आप क्या चुनेंगे? –

0

memset बेहतर अपने पाश के लिए, यह हो सकता है ठीक उसी से अनुकूलित हो सकता है। में से एक चुनें:

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

के बाद से सवाल एक सी ++ टैग है, मुहावरेदार तरीका होगा:

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

ध्यान दें कि यह सी

में
+0

अच्छी कॉल के रूप में टैग करेंगे, लेकिन क्या यह उत्तर अपूर्ण नहीं है कि यह शून्य टर्मिनेटर नहीं रखता है? – feuGene

1

काम नहीं करता है @OliCharlesworth के अनुसार, memset का उपयोग करने का सबसे अच्छा तरीका है:

char bla[20]; 

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

ध्यान दें कि GNU सी में, आप निम्न एक्सटेंशन (रेंज नामित initializers) का उपयोग कर सकते हैं:

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

आप सरणी संकलन समय पर प्रारंभ चाहते हैं, तो आप अपने चार foo[20]; घोषणा के रूप में संशोधित कर सकते हैं इस प्रकार है:

char foo[20] = {0x20};

आप रन टाइम पर रिक्त स्थान के लिए सरणी प्रारंभ करने की आवश्यकता है, तो आप निम्न का उपयोग कर सकते हैं:

memset(foo, ' ', sizeof(foo) -1); 
foo[20] = '\0'; 
संबंधित मुद्दे