#c #arrays
#c #массивы
Вопрос:
Что происходит, когда я пишу array[i] = ''
внутри цикла for?
char arrayPin[256];
for(int i = 0; i<256; i )
{
arrayPin[i] = '';
}
Комментарии:
1. Другой способ сделать то же самое в этом конкретном случае —
memset(arrayPin, 0, 256);
Ответ №1:
Программа пытается получить доступ к памяти в расположении <base address of 'array'> (<sizeof array element> * 'i')
и присвоить ему значение 0 (двоичный 0, а не символьный ‘0’). Эта операция может завершиться успешно, а может и нет, и может даже привести к сбою приложения, в зависимости от состояния ‘array’ и ‘i’.
Если ваш массив имеет тип char*
or char[]
и операция присваивания выполнена успешно, то вставка двоичного символа 0 в позицию ‘i’ приведет к усечению строки в этой позиции, когда она используется с вещами, которые понимают строки в стиле C ( printf()
это один из примеров).
Итак, если вы сделаете это в for
цикле по всей длине строки, вы уничтожите все существующие данные в строке и заставите их интерпретироваться как пустая строка нулевой длины устройствами, которые обрабатывают строки в стиле C.
Ответ №2:
char arrayPin[256];
После строки выше, arrayPin
в неинициализированном массиве, содержимое которого неизвестно (при условии, что оно не является глобальным).
----------------------------
|?|?|?|?|?|?|?|?|?|?|...|? |
----------------------------
byte: 0 1 2 3 4 5 6 7 8 9 255
Следующий код:
for(int i = 0; i<256; i )
{
arrayPin[i] = '';
}
инициализирует каждый arrayPin
элемент значением 0:
----------------------------
|0|0|0|0|0|0|0|0|0|0|...|0 |
----------------------------
byte: 0 1 2 3 4 5 6 7 8 9 255
Ответ №3:
Я полагаю, у вас есть что-то вроде char *array
. В этом случае он запишет символ с кодом 0x00 в i
-ю позицию.
Это весьма полезно при работе со строками ANSI.
указывает на конец строки. Например:
char str[] = "Hello world";
cout << str << endl; // Output "Hello world"
str[5] = '';
cout << str << endl; // Output just "Hello"
Комментарии:
1. Изменение содержимого строкового литерала на самом деле является неопределенным поведением. Используйте
char str[] = "Hello world";
, если хотите изменить строку.