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

Очистка массива char c

Я думал, установив первый элемент в null, очистит все содержимое массива char.

char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';

Однако это только устанавливает первый элемент в null.

или

my_custom_data[0] = 0; 

вместо использования memset, я подумал, что приведенные выше примеры должны очистить все данные.

4b9b3361

Ответ 1

Это зависит от того, как вы хотите просмотреть массив. Если вы просматриваете массив как серию char, тогда единственный способ очистить данные - коснуться каждой записи. memset, вероятно, является наиболее эффективным способом достижения этого.

С другой стороны, если вы предпочитаете рассматривать это как строку с завершающим нулевым символом C/С++, установка первого байта в 0 будет эффективно очищать строку.

Ответ 2

Массив в C - это просто место в памяти, поэтому ваше назначение my_custom_data[0] = '\0'; просто устанавливает первый элемент в ноль и оставляет другие элементы неповрежденными.

Если вы хотите очистить все элементы массива, вам нужно будет посетить каждый элемент. Это то, что memset для:

memset(&arr[0], 0, sizeof(arr));

Это, как правило, самый быстрый способ позаботиться об этом. Если вы можете использовать С++, рассмотрите std:: fill вместо:

char *begin = &arr;
char *end = begin + sizeof(arr);
std::fill(begin, end, 0);

Ответ 3

Почему вы думаете, что установка одного элемента очистит весь массив? В C, особенно, почти никогда не бывает, если программист явно не программирует его. Если вы установили первый элемент в ноль (или любое значение), то вы сделали именно это и не более того.

При инициализации вы можете установить массив в ноль:

char mcd[40] = {0}; /* sets the whole array */

В противном случае я не знаю никакой техники, кроме memset, или чего-то подобного.

Ответ 4

Использование:

memset(my_custom_data, 0, sizeof(my_custom_data));

Или:

memset(my_custom_data, 0, strlen(my_custom_data));

Ответ 5

Почему бы не использовать memset()? Как это сделать.

Установка первого элемента оставляет остальную память нетронутой, но функции str будут обрабатывать данные как пустые.

Ответ 6

Попробуйте использовать следующий код:

void clean(char *var) {
    int i = 0;
    while(var[i] != '\0') {
        var[i] = '\0';
        i++;
    }
}

Ответ 7

Найдите ниже, где я объяснил данные в массиве после случая 1 и случая 2.

char sc_ArrData[ 100 ];
strcpy(sc_ArrData,"Hai" );

Случай 1:

sc_ArrData[0] = '\0';

Результат:

-   "sc_ArrData"
[0] 0 ''
[1] 97 'a'
[2] 105 'i'
[3] 0 ''

Случай 2:

memset(&sc_ArrData[0], 0, sizeof(sc_ArrData));

Результат:

-   "sc_ArrData"
[0] 0 ''
[1] 0 ''
[2] 0 ''
[3] 0 ''

Хотя установка первого аргумента в NULL будет делать трюк, рекомендуется использовать memset

Ответ 8

Неа. Все, что вы делаете, устанавливает первое значение в '\ 0' или 0.

Если вы работаете с нулевыми завершенными строками, то в первом примере вы получите поведение, которое имитирует то, что вы ожидаете, однако память все еще установлена.

Если вы хотите очистить память без использования memset, используйте цикл for.

Ответ 9

Вы должны использовать memset. Установка только первого элемента не будет работать, вам нужно установить все элементы - если нет, как вы можете установить только первый элемент в 0?

Ответ 10

Написание нулевого символа для первого символа делает именно это. Если вы рассматриваете его как строку, код, подчиняющийся символу завершения нулевой последовательности, будет рассматривать его как пустую строку, но это не то же самое, что очистка данных. Если вы хотите действительно очистить данные, вам понадобится использовать memset.

Ответ 11

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

Это неверно, поскольку вы обнаружили

Однако это только устанавливает первый элемент в null.

Точно!

Вам нужно использовать memset, чтобы очистить все данные, недостаточно указать одну из записей в null.

Однако, если установка элемента массива в значение null означает что-то особенное (например, при использовании нулевой завершающей строки), может быть достаточно установить первый элемент в null. Таким образом, любой пользователь массива поймет, что он пуст, хотя массив все еще содержит старые символы в памяти

Ответ 12

установите первый элемент в NULL. печать массива char ничего не даст вам.

Ответ 13

Как насчет следующего:

bzero(my_custom_data,40);

Ответ 14

void clearArray (char *input[]){
    *input = ' '; 
}

Ответ 15

Попробуйте следующее:

strcpy(my_custom_data,"");