2009-11-14 2 views
4

Я использую строку:Каков наилучший способ сброса char [] в C?

char word[100]; 

Я добавить некоторые символы в каждой позиции, начиная с 0. Но тогда мне нужно быть в состоянии очистить все те позиции, так что я могу начать добавлять новые символы, начиная с 0.

Если я этого не делаю, то если вторая строка будет сокращена, тогда первая из них будет иметь дополнительные символы из первой строки при добавлении второй, так как я их не перезаписываю.

+0

Как показано ниже, плакат хочет обнулить весь массив, потому что он/она не хочет использовать стандартные функции строковых библиотек, такие как strcat. Он/она хочет иметь возможность просто писать новые символы поверх всего, что есть, и рассчитывать на то, что \ 0 на следующей позиции после того, как он/она прекратил писать. – dubiousjim

ответ

15

Если вы хотите обнулить весь массив, вы можете:

memset(word, 0, sizeof(word)); 
+0

Это, похоже, не работает ... почему? – goe

+0

@goe Вы могли бы показать нам весь код - или то, что он действительно выводит после того, как вы попробуете это? – poundifdef

+0

Это действительно работает, я назвал это неправильно, спасибо – goe

12

Вам не нужно очищать их, если вы используете строки с нулевым символом в стиле C. Вам нужно только установить элемент после окончательного символа в строке в NUL ('\ 0').

Например,

 
char buffer[30] = { 'H', 'i', ' ', 'T', 'h', 'e', 'r', 'e', 0 }; 
// or, similarly: 
// char buffer[30] = "Hi There"; // either example will work here. 

printf("%s", buffer); 
buffer[2] = '\0'; 
printf("%s", buffer) 

выведет

Привет Там
Привет

, даже если он по-прежнему верно, что buffer[3] == 'T'.

+0

Мне все равно, что он будет выводить, мне нужно, чтобы все эти позиции были разделены на ''. Как я могу это сделать? – goe

+0

Вы уверены, что вам нужно? Потому что я говорю, что при программировании на C вам обычно не нужно это делать. –

0

*word = '\0';

Дополнительные вещи, чтобы пройти мимо 15 символов проводки предела закатывает глаза.

+1

Это не сработает. При повторном заполнении массива \ 0 перезаписывается, а мусор, который был там до этого, все еще существует. – foraidt

+0

Это не сработает – goe

+0

Я неправильно понял проблему. В OP не очевидно, что функции обработки строки C не используются. –

3

strcpy(word,"") также может быть использован для этой цели.