Я думал, что установка первого элемента на null очистит все содержимое массива char.
char my_custom_data[40] = "Hello!";
my_custom_data[0] = '\0';
Однако это устанавливает значение null только для первого элемента.
или
my_custom_data[0] = 0;
memset
я думал, что два приведенных выше примера должны очистить все данные, а не использовать .
Ответы:
Это зависит от того, как вы хотите просматривать массив. Если вы просматриваете массив как серию символов, то единственный способ очистить данные - прикоснуться к каждой записи.
memset
вероятно, самый эффективный способ добиться этого.С другой стороны, если вы решили рассматривать это как строку C / C ++ с завершающим нулем, установка первого байта в 0 эффективно очистит строку.
источник
Массив в C - это просто место в памяти, поэтому ваше
my_custom_data[0] = '\0';
назначение просто устанавливает первый элемент в ноль и оставляет остальные элементы нетронутыми.Если вы хотите очистить все элементы массива, вам придется посетить каждый элемент. Вот для чего
memset
:Как правило, это самый быстрый способ решить эту проблему. Если вы можете использовать C ++, рассмотрите вместо этого std :: fill:
источник
Почему вы думаете, что установка одного элемента очистит весь массив? В C особенно мало что происходит без явного программирования программистом. Если вы установите для первого элемента ноль (или любое другое значение), то вы сделали именно это, и не более того.
При инициализации вы можете установить массив в ноль:
В остальном я не знаю никакой другой техники, кроме memset или чего-то подобного.
источник
Использование:
Или:
источник
memset(my_custom_data, 0, strlen(my_custom_data));
) очистит только первый '\ 0', который может находиться за пределами конца массива. Это может быть нормально, а может и нет.Попробуйте следующий код:
источник
Почему бы не использовать
memset()
? Вот как это сделать.Установка первого элемента оставляет остальную память нетронутой, но функции str будут обрабатывать данные как пустые.
источник
Пожалуйста, найдите ниже, где я объяснил данные в массиве после случаев 1 и 2.
Случай 1:
Результат:
Случай 2:
Результат:
Хотя установка первого аргумента в NULL поможет, рекомендуется использовать memset.
источник
Нет. Все, что вы делаете, это устанавливаете первое значение на '\ 0' или 0.
Если вы работаете со строками с завершающим нулем, то в первом примере вы получите поведение, имитирующее то, что вы ожидаете, однако память все еще установлена.
Если вы хотите очистить память без использования memset, используйте цикл for.
источник
Вам следует использовать memset. Установка только первого элемента не сработает, вам нужно установить все элементы - если нет, как вы могли установить только первый элемент в 0?
источник
Запись нулевого символа в первый символ делает именно это. Если вы обрабатываете его как строку, код, подчиняющийся нулевому символу завершения, будет рассматривать ее как пустую строку, но это не то же самое, что очистка данных. Если вы действительно хотите очистить данные, вам нужно использовать memset.
источник
Обычно я делаю так:
источник
Это неправильно, как вы обнаружили
Именно!
Вам нужно использовать memset для очистки всех данных, недостаточно установить для одной из записей значение null.
Однако, если установка для элемента массива значения NULL означает что-то особенное (например, при использовании завершающей нулевой строки в), может быть достаточно установить для первого элемента значение NULL. Таким образом, любой пользователь массива поймет, что он пуст, даже если массив все еще включает в себя старые символы в памяти.
источник
установите первый элемент в NULL. печать массива символов ничего не вернет.
источник
Как насчет следующего:
источник
источник
Попробуйте следующее:
источник