Дополнительно
Используя memset для целочисленных массивов в C
char str[]="beautiful earth";
memset(str,'*',6);
printf("%s",str);
output:
******ful earth
- Как использовать функцию memset, можно инициализировать только несколько целочисленных значений индекса массива к 1, Как указано ниже??
int arr[15];
memset(arr,1,6);
29
10
Нет, вы не можете использовать функцию memset ()`, как это. [На странице][1] говорит (акцент шахты):
и GT;
функцию memset()
функция заполняет первые N**байты** в область памяти, на которую указывает
S` с постоянной байт "с".Так как
int
является, как правило, 4 байта, это выиграл'т сократить его.Если вы (неправильно!!) попробуйте сделать вот это:
затем первых 6 `типа int в массив будет установлен 0x01010101 = 16843009.
Единственный раз, когда он'никогда не приемлемо писать через А "клякса" из данных с типом данных Byte(S), является
функцию memset(всего, 0, как sizeof(вещи));
чтобы "ноль-аут" в целом струтура/массив. Это работает, потому что нуль, от 0x00000000, 0.0, все нули.Решение использовать
для
петли и установить его себе:Короткий ответ, нет.
Длинный ответ,
остановлюсь
наборы байтов и работает для персонажей, потому что они один байт, но чисел нет.Третьим аргументом memset-это размер в байтах. Так что вы должны установить общий размер в байтах
Арр[15]
Однако, вероятно, вы хотите установить значение 1, чтобы все элементы в обр. Затем вы'вэ лучше установить в петле.
Потому что функцию memset()` устанавливаем 1 в каждый байт. Так что's не предполагаемое.
На Linux, OSX и других Unix-подобных операционных системах, где
wchar_t
имеет 32 бита и вы можете использоватьwmemset()
вместофункцию memset()
.Обратите внимание, что
wchar_t
имеет на MS-Windows-это 16 бит, так что этот трюк может не работать.Нет, вы можете'т [компактно] использовать функцию memset
для этой цели, если требуемое целевое значение
0.
остановлюсь` относится к целевой области памяти как массив байтов, а не массив из целых.Довольно популярный хак для заполнения области памяти, с повторяющимся рисунком, фактически основана на
безопасности
. Он тяжело опирается на ожидания, что функции memcpy` копирование данных в прямом направленииЭто, конечно, довольно грязный хак, так как поведение
стандарт безопасности
неопределено, когда исходный и конечный пункты области памяти перекрываются. Вы можете написать свой собственный вариантбезопасности
, убедившись, что он копирует данные в прямом направлении, и использовать в выше моды. Но это действительно не стоит. Просто использовать простой цикл для задания элементов массива до требуемого значения.В идеале, вы не можете использовать функцию memset, чтобы установить arrary для всех 1.<БР/>ведь остановлюсь работает на байт, и каждый байт в 1.<БР/>
Так когда-то читал, ценность он будет показывать 16843009 = 0x01010101 = 1000000010000000100000001<БР/> Не слово 0x00000001<БР/> Но если ваш requiremnt только для bool или двоичное значение, то можно установить, используя стандарт C99 для библиотеки C
Поскольку никто не упомянул об этом...
Хотя вы не можете инициализировать целых чисел со значением
1
, используя memset, вы можете инициализировать их с значение-1
и просто изменить вашу логику, чтобы вместо того, чтобы работать с отрицательными значениями.Например, чтобы инициализировать первые 6 цифр вашего массива с
-1
, вы могли бы сделатьКроме того, если вам нужно сделать после этой инициализации, вы можете объявить массив, чтобы начать со значениями
1
от компиляции.Остановлюсь наборы значений для типов данных, 1 байт, но есть целых 4 байта или больше , поэтому он выиграл't работа, и вы'll получить значения мусор. Это's в основном используется при работе с char и строковые типы.
Я пробовал следующие программы и кажется, что вы можете инициализировать Ваш массив, используя memset() с только -1 и 0