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