The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]



"значение переменной в строковом массиве"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (C/C++)
Изначальное сообщение [ Отслеживать ]

"значение переменной в строковом массиве"  +/
Сообщение от creapt (??) on 02-Дек-17, 23:17 
Подскажите пожалуйста.
С++

char OCR_sh[3][5]={"OCR2","OCR1A","OCR1B"};

например: нужно присвоить значение 100 переменной OCR2 (OCR_sh[0]) и в дальнейшем изменять ее значение
OCR_sh[0]=100;
Как, какую функцию применить?

Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "значение переменной в строковом массиве"  +/
Сообщение от pavlinux (ok) on 04-Дек-17, 03:47 
> OCR_sh[0]=100;

strcpy(OCR_sh[0], "100");

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "значение переменной в строковом массиве"  +/
Сообщение от ACCA (ok) on 04-Дек-17, 20:28 
  • У него нет переменной OCR2
  • Он не может присвоить значение 100 элементу массива OCR_sh[0], у них тип разный
  • Строки "OCR1A" и "OCR1B" в его примере занимают по 6 байтов, он уже вылез за границы char[5]. Хорошо, если компилятор углядит и отругает
  • Ему нельзя пользоваться strcpy, разобьёт и руки порежет. Только strncpy

  • Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

    3. "значение переменной в строковом массиве"  +/
    Сообщение от creapt (??) on 04-Дек-17, 21:50 
    OCR2, OCR1B, OCR1A это регистры.
    Опишу подробнее: нужно регистры поместить в массив, сравнивать и изменять их значения.

    запись strcpy(OCR_sh[0], "100"); работает, но это немного не то, что хотел.

    OCR_sh[3][5]={"OCR2","OCR1A","OCR1B"}; - возможно, это я неверно написал.

    Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

    5. "значение переменной в строковом массиве"  +/
    Сообщение от pavlinux (ok) on 04-Дек-17, 22:44 
    > ... но это немного не то, что хотел.

    Какой вопрос, такой ответ. :)


    > 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;  

    Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

    4. "значение переменной в строковом массиве"  +/
    Сообщение от pavlinux (ok) on 04-Дек-17, 22:35 
    > У него нет переменной OCR2

    AI скорректировал вопрос.

    > Он не может присвоить значение 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

    если всё под контролем, то можно.

    Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

    6. "значение переменной в строковом массиве"  +/
    Сообщение от ACCA (ok) on 04-Дек-17, 23:04 
    >> Он не может присвоить значение 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
    > если всё под контролем, то можно.

    Намекаешь, что он не поленится проверить длины строк и размеры буферов?

    Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

    7. "значение переменной в строковом массиве"  +/
    Сообщение от pavlinux (ok) on 04-Дек-17, 23:12 
    > Напечатает то ли

    Ничего не знаю, в ТЗ не было условия про печать :)

    > то ли... то ли ...то ли
    > 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

    Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

    Архив | Удалить

    Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




    Партнёры:
    PostgresPro
    Inferno Solutions
    Hosting by Hoster.ru
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2024 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру