Как очистить массив символов?

имеют массив символов, таких как члены char[255]. Как я могу очистить его полностью без использования цикла?

char members[255];

под "пустым" я имею в виду, что если в нем хранятся некоторые значения, то это не должно. Например, если я делаю strcat, то старое значение не должно оставаться

members = "old value";

//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"

13 ответов


используя

  memset(members, 0, 255);

В общем

  memset(members, 0, sizeof members);

если массив находится в области, или

  memset(members, 0, nMembers * (sizeof members[0]) );

если у вас есть только значение указателя, и nMembers-количество элементов в массиве.


EDIT конечно, теперь требование изменилось с общей задачи очистки массива на чисто сброс строки,memset является излишним и просто обнуление первого элемента достаточно (как отмечено в других находить ответы.)


EDIT для использования функцию memset вы должны включить строка.h.


зависит от того, что вы подразумеваете под "пустой":

members[0] = '';

члены char[255] = {0};


EDIT: учитывая последнее редактирование вопроса, это больше не будет работать, поскольку нет нулевого завершения - если вы попытаетесь распечатать массив, вы получите свои символы, за которыми последует ряд нечеловеческих символов. Тем не менее, я оставляю этот ответ здесь как сообщество wiki для потомков.

char members[255] = { 0 };

это должно сработать. В соответствии с языком программирования C:

Если массив имеет фиксированный размер, количество инициализаторы не могут превышать число членов массива; если их меньше, остальные члены инициализируются с 0.

Это означает, что каждый элемент массива будет иметь значение 0. Я не уверен, что это то, что вы считаете "пустым" или нет, так как 0 является допустимым значением для char.


вы не можете очистить массив как таковой, он всегда содержит одинаковый объем данных.

в более широком контексте данные в массиве могут представлять собой пустой список элементов, но это должно быть определено в дополнение к массиву. Наиболее распространенные способы сделать это-сохранить количество допустимых элементов (см. ответ pmg) или строки, чтобы завершить их нулевым символом (ответ Феликса). Есть и более сложные способы, например, кольцевой буфер использует два индекса для позиции, где данные добавляются и удаляются.


не пытайтесь обнулить свой массив символов, если вы имеете дело со строками. Ниже приведен простой способ работы со строками типа char.

копировать (назначить новую строку):

strcpy(members, "hello");

объединить (добавить строку):

strcat(members, " world");

пустая строка:

members[0] = 0;

просто так.


Я бы пошел с

members_in_use = 0;

members[0] = 0;

достаточно, учитывая ваши требования.

обратите внимание, что это не "опорожнение" буфера. Память по-прежнему выделена, допустимые значения символов могут по-прежнему существовать в ней и так далее..


использовать bzero(array name, no.of bytes to be cleared);


проще лучше-имеет смысл?

в этом случае работают только члены[0] = 0. не усложняй простой вопрос.


"пустой массив" если вы имеете в виду сброс до 0, то вы можете использовать bzero.

#include <strings.h>  
void bzero(void *s, size_t n);  

Если вы хотите заполнить массив другим символом по умолчанию, вы можете использовать функцию memset.

#include <string.h>  
void *memset(void *s, int c, size_t n);  

предупреждение: Я обычно не программирую на C, поэтому в моих примерах может быть какой-либо синтаксис, но я надеюсь, что идеи, которые я пытаюсь выразить, ясны.

Если " опорожнение "означает" содержащее пустую строку", вы можете просто назначить первый элемент массива нулю, что эффективно сделает массив содержать строку empry:

members[0] = 0;

Если " опорожнение "означает" освобождение используемой памяти", вы не должны использовать фиксированный массив символов. Скорее, вы должны определить указатель на char, а затем выполнить malloc / free (или String assignment) по мере необходимости.

пример использования только статических строк:

char* emptyString="";
char* members;

//Set string value
members = "old value";

//Empty string value
member = emptyString

//Will return just "new"
strcat(members,"new");

вы можете использовать следующие команды:

strcpy_s(members, "");