Как инициализировать строку в макросах ?

Здесь мы публикуем ответы на ваши наиболее частые вопросы по продукции Weintek

Модераторы: kiv, 8bit, VanMo

Как инициализировать строку в макросах ?

Сообщение 8bit » 27 июл 2021, 15:35

Weintek рекомендует присваивать начальные значения переменным при их объявлении.
Если с числами все понятно и можно даже не инициализировать (объявили переменную, а потом задали ей значение из регистра LW, например), то как инициализировать строку и что будет, если ее начать использовать сразу после объявления ?

Первый вариант, который приходит в голову - это присвоить пустую строку.

Код: Выделить всё

char text[20]=""



Однако, если вы сразу же выведите эту строку в ASCII объект, то увидите мусор (куски слов, различные символы и т.д.), а не пустую строку.
Это происходит потому, что макрос при объявлении массива символов просто резервирует соответствующий объем памяти под эту переменную, никак не очищая её содержимое.

Поэтому, если в коде макроса вы начнете копировать в эту переменную текст, который короче размера этого символьного массива, то пронаблюдаете скверный результат.
Код: Выделить всё
char myText[20] = ""
StringCat("abcd", myText[0])
SetData(myText[0], "Local HMI", LW, 500, 20)



В LW-500 мы увидим "abcd#&Wo,df%D_$#@1h+", где abcd наш текст и #&Wo,df%D_$#@1h+ мусор из оперативной памяти .

Один из вариантов инициализации массива символов можно подсмотреть в макросах демо-проектов самого Weintek.
Код: Выделить всё

    char array_name[array_size] = "                    " // количество пробелов равно размеру массива [array_size]



Но более лаконично и правильно инициализировать так:
Код: Выделить всё

    char array_name[array_size]
    FILL(array_name[0], 0x00, array_size) // функция записывает в массив символы с кодом 0х00 начиная с элемента [0] в количестве array_size

Хороший вопрос содержит половину ответа - A good question contains half the answer
Аватара пользователя
8bit
 
Сообщения: 1179
Зарегистрирован: 20 апр 2020, 19:07

Вернуться в Часто задаваемые вопросы по Weintek (F.A.Q.)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2