Как очистить массив символов?
есть массив символов, таких как члены 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
это перебор и просто обнуление первого элемента достаточно (как отмечалось в других находить ответы.)
редактировать для того, чтобы использовать memset вы должны включить строка.h.
EDIT: учитывая последнее редактирование вопроса, это больше не будет работать, поскольку нет нулевого завершения - если вы попытаетесь распечатать массив, вы получите свои символы, за которыми последует ряд нечеловеческих символов. Тем не менее, я оставляю этот ответ здесь как сообщество wiki для потомков.
char members[255] = { 0 };
Это должно сработать. Согласно языку программирования C:
Если массив имеет фиксированный размер, количество инициализаторы не могут превышать число членов массива; если их меньше, остальные члены инициализируются с 0.
Это означает, что каждый элемент массива будет иметь значение 0. Я не уверен, что это то, что вы считаете "пустым" или нет, так как 0 является допустимым значением для
char
.
вы не можете очистить массив как таковой, он всегда содержит одинаковое количество данных.
в более широком контексте данные в массиве могут представлять собой пустой список элементов, но это должно быть определено в дополнение к массиву. Наиболее распространенные способы сделать это-сохранить количество допустимых элементов (см. ответ pmg) или для строк, чтобы завершить их нулевым символом (ответ Феликса). Есть и более сложные способы, например, кольцевой буфер использует два индекса для позиции, где данные добавляются и удаляются.
не пытайтесь обнулить свой массив символов, если вы имеете дело со строками. Ниже приведен простой способ работы со строками символов.
копировать (назначить новую строку):
strcpy(members, "hello");
объединить (добавить строку):
strcat(members, " world");
пустая строка:
members[0] = 0;
просто так.
members[0] = 0;
достаточно, учитывая ваши требования.
обратите внимание, однако это не "опорожнение" буфера. Память все еще выделена, допустимые значения символов могут все еще существовать в ней, и так далее..
проще лучше - есть смысл?
в этом случае работает только 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");