Если с числами все понятно и можно даже не инициализировать (объявили переменную, а потом задали ей значение из регистра 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