Имейте массив символов, например char members [255]. Как я могу полностью его очистить, не используя цикл?
char members[255];
Под «пустым» я подразумеваю, что если в нем были сохранены некоторые значения, то этого не должно быть. Например, если я использую strcat, старое значение не должно оставаться
members = "old value";
//empty it efficiently
strcat(members,"new"); // should return only new and not "old value new"
string
. Чтобы «очистить» строку, установите ее первый элемент в '\ 0':members[0] = '\0';
Ответы:
с помощью
memset(members, 0, 255);
в общем
memset(members, 0, sizeof members);
если массив находится в области видимости, или
memset(members, 0, nMembers * (sizeof members[0]) );
если у вас есть только значение указателя, а nMembers - это количество элементов в массиве.
РЕДАКТИРОВАТЬ Конечно, теперь требование изменилось с общей задачи очистки массива на чистый сброс строки,
memset
является излишним, и достаточно просто обнуления первого элемента (как указано в других ответах).РЕДАКТИРОВАТЬ Чтобы использовать memset , вы должны включить string.h .
источник
Зависит от того, что вы подразумеваете под словом «пустой»:
members[0] = '\0';
источник
Не пытайтесь обнулить массив символов, если вы имеете дело со строками. Ниже приведен простой способ работы со строками символов.
Копировать (назначить новую строку):
strcpy(members, "hello");
Объединить (добавить строку):
strcat(members, " world");
Пустой строкой:
members[0] = 0;
Вот так просто.
источник
члены типа char [255] = {0};
источник
РЕДАКТИРОВАТЬ: Учитывая последнее изменение вопроса, это больше не будет работать, поскольку нет нулевого завершения - если вы попытаетесь распечатать массив, вы получите свои символы, за которыми следует ряд символов, нечитаемых человеком. Однако я оставляю этот ответ здесь как вики сообщества для потомков.
char members[255] = { 0 };
Это должно сработать. Согласно языку программирования C:
Это означает, что каждый элемент массива будет иметь значение 0. Я не уверен, что вы считаете это «пустым» или нет, поскольку 0 - допустимое значение для a
char
.источник
Вы не можете очистить массив как таковой, он всегда содержит одинаковое количество данных.
В более широком контексте данные в массиве могут представлять собой пустой список элементов, но он должен быть определен в дополнение к массиву. Наиболее распространенные способы сделать это - вести подсчет допустимых элементов (см. Ответ pmg) или завершать строки нулевым символом (ответ Феликса). Есть и более сложные способы, например, кольцевой буфер использует два индекса для позиций, в которые данные добавляются и удаляются.
источник
members[0] = 0;
достаточно, учитывая ваши требования.
Обратите внимание, однако, что это не «опустошение» буфера. Память по-прежнему выделена, в ней могут существовать допустимые значения символов и т. Д.
источник
0
действительный персонаж. Мы не знаемmembers
, обрабатываются ли они как строка C или нет.Использовать
bzero(array name, no.of bytes to be cleared);
источник
Я бы пошел с
members_in_use = 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);
источник
проще лучше - имеет смысл?
в этом случае работает только members [0] = 0. не делайте простой вопрос таким сложным.
источник
Отказ от ответственности: я обычно не программирую на C, поэтому в моих примерах могут быть какие-то синтаксические ошибки, но я надеюсь, что идеи, которые я пытаюсь выразить, ясны.
Если «очистка» означает «содержащий пустую строку», вы можете просто присвоить первому элементу массива ноль, что фактически заставит массив содержать пустую строку:
members[0] = 0;
Если «очистка» означает «освобождение памяти, которую он использует», вы не должны использовать фиксированный массив символов в первую очередь. Скорее, вы должны определить указатель на char, а затем выполнить malloc / free (или присвоение строки) в зависимости от ситуации.
Пример с использованием только статических строк:
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, "");
источник