Подскажите пожалуйста.
С++char OCR_sh[3][5]={"OCR2","OCR1A","OCR1B"};
например: нужно присвоить значение 100 переменной OCR2 (OCR_sh[0]) и в дальнейшем изменять ее значение
OCR_sh[0]=100;
Как, какую функцию применить?
> OCR_sh[0]=100;strcpy(OCR_sh[0], "100");
У него нет переменной OCR2 Он не может присвоить значение 100 элементу массива OCR_sh[0], у них тип разный Строки "OCR1A" и "OCR1B" в его примере занимают по 6 байтов, он уже вылез за границы char[5]. Хорошо, если компилятор углядит и отругает Ему нельзя пользоваться strcpy, разобьёт и руки порежет. Только strncpy
OCR2, OCR1B, OCR1A это регистры.
Опишу подробнее: нужно регистры поместить в массив, сравнивать и изменять их значения.запись strcpy(OCR_sh[0], "100"); работает, но это немного не то, что хотел.
OCR_sh[3][5]={"OCR2","OCR1A","OCR1B"}; - возможно, это я неверно написал.
> ... но это немного не то, что хотел.Какой вопрос, такой ответ. :)
> OCR_sh[3][5]={"OCR2","OCR1A","OCR1B"}; - возможно, это я неверно написал.Ты тут написал двухмерный массив из элементов типа char, если его раскрутить, то выглядеть будет так:
OCR_sh[3][5]= {{'O','C','R','2','\0'}, {'O','C','R','1','A','\0'}, {'O','C','R','1','B','\0'}};
Каждый элемент в кавычках и есть значение переменной, и их 15 штук.
100 можно присвоить только одной из них.OCR_sh[0][0]=100;
> У него нет переменной OCR2AI скорректировал вопрос.
> Он не может присвоить значение 100 элементу массива OCR_sh[0], у них тип разный
Я же смог :) В С всё int, кроме float (этот тоже int, но замороченный)
На самом деле, это грязные хаки олдскульных микроконтрольщиков, всех кто пишет "для себя".Так они коряво объявляют: Есть три строки, не больше 5 байт в каждой
char OCR_sh[3][5]={"OCR2","OCR1A","OCR1B"};
Так они заменяют строки: зато гарантия, что лишнее не попадёт в регистры.
strcpy(OCR_sh[0], "Вротмне");
strcpy(OCR_sh[1], "ноги,");
strcpy(OCR_sh[2], "дайтедве");Не все компиляторы проверяют размер переменных и матерятся
> [li] Строки "OCR1A" и "OCR1B" в его примере занимают по 6 байтов,
Пофег сколько занимают, выделено только 3 раза по 5
> он уже вылез за границы char[5]. Хорошо, если компилятор углядит и
> отругаетНед, размер задаётся объявлением: OCR_sh[3][5] и того 15 раз по CHAR_BIT
> Ему нельзя пользоваться strcpy, разобьёт и руки порежет. Только strncpy
если всё под контролем, то можно.
>> Он не может присвоить значение 100 элементу массива OCR_sh[0], у них тип разный
> Я же смог :) В С всё int, кроме float (этот тоже
> int, но замороченный)Ты старый жулик, путающий студентов. "100" и 100 - это очень разные вещи.
>> [li] Строки "OCR1A" и "OCR1B" в его примере занимают по 6 байтов,
> Пофег сколько занимают, выделено только 3 раза по 5Ни разу не пофиг, оно же инициализировано. Поэтому
puts(OCR_sh[1]);
puts(OCR_sh[2]);Напечатает то ли
OCR1AOCR1B
OCR1Bто ли
OCR1A
то ли
OCR1A
OCR1BЭто если выравнивание выручит.
> Нед, размер задаётся объявлением: OCR_sh[3][5] и того 15 раз по CHAR_BITПотому и можешь наползти 6-байтовыми строками друг на друга, а последней строкой - на что повезёт.
>> Ему нельзя пользоваться strcpy, разобьёт и руки порежет. Только strncpy
> если всё под контролем, то можно.Намекаешь, что он не поленится проверить длины строк и размеры буферов?
> Напечатает то лиНичего не знаю, в ТЗ не было условия про печать :)
> то ли... то ли ...то ли
> puts(OCR_sh[2]);Такой хак с двухмерным масcивом, превратит его в указатель (начинающейся с адреса OCR_sh[2][0]),
на одномерный массив размером [5]puts((char(*)[5])OCR_sh[2]);
> Намекаешь, что он не поленится проверить длины строк и размеры буферов?
Я думаю автор вааааще невдупляет чего творит :)
Или препод спецом скопипастил такой гадцкий код.
OCR1A, OCR1B - это регистры таймера AVR ATmega
http://dfe.petrsu.ru/koi/posob/avrlab/mega16tcnt1.html