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


есть массив символов, таких как члены 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 56

13 ответов:

используя

  memset(members, 0, 255);

В общем

  memset(members, 0, sizeof members);

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

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

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


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


редактировать для того, чтобы использовать memset вы должны включить строка.h.

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

members[0] = '';

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

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

char members[255] = { 0 };

Это должно сработать. Согласно языку программирования C:

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

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

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

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

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

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

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

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

в этом случае работает только members[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, "");