Подтвердить что ты не робот

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

Имейте массив символов, таких как char members [255]. Как я могу полностью опорожнить его, не используя цикл?

char members[255];

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

members = "old value";

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

Ответ 1

используя

  memset(members, 0, 255);

вообще

  memset(members, 0, sizeof members);

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

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

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


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


EDIT Чтобы использовать memset, вы должны включить string.h.

Ответ 2

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

members[0] = '\0';

Ответ 3

char members [255] = {0};

Ответ 4

РЕДАКТИРОВАТЬ: Учитывая последнее изменение вопроса, это больше не будет работать, так как нет нулевого завершения. Если вы попытаетесь распечатать массив, вы получите свои символы, за которыми следует число нечитаемых человеком символов. Тем не менее, я оставляю этот ответ здесь как вики сообщества для потомков.

char members[255] = { 0 };

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

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

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

Ответ 5

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

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

Ответ 6

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

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

strcpy(members, "hello");

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

strcat(members, " world");

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

members[0] = 0;

Просто так.

Ответ 7

Я бы пошел с

members_in_use = 0;

Ответ 8

members[0] = 0;

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

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

Ответ 9

Используйте bzero(array name, no.of bytes to be cleared);

Ответ 10

проще - лучше?

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

Ответ 11

Под "пустым массивом", если вы имеете в виду reset в 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);  

Ответ 12

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

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

members[0] = 0;

Если "опорожнение" означает "освобождение используемой памяти", вы не должны использовать фиксированный массив char в первую очередь. Скорее, вы должны определить указатель на 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");

Ответ 13

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

strcpy_s(members, "");