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

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

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

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

или же

 my_custom_data[0] = 0; 

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Или же:

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

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

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

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

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

Pls найдет ниже, где я объяснил данные в массиве после случая 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

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

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

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

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

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

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

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

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

Именно так!

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

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

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

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

 bzero(my_custom_data,40); 

Обычно я просто делаю так:

 memset(bufferar, '\0', sizeof(bufferar)); 
 void clearArray (char *input[]){ *input = ' '; } 

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

 strcpy(my_custom_data,"");