
Сообщение от
Cs-Cs
Ты не забудь, что в конце готовой строки должен быть нулевой символ (два байта с кодом 0x00).
Возможно, его стоит явно добавлять в конец.
Вроде, и так работает, без нулей этих... Ну, пусть будет с нулями...
Код:
Код:
PROGRAM qqq3
VAR
aaa1: WSTRING(1000) := "qwerty123";
aaa2: WSTRING(1000) := "йцукен456";
Temp : BOOL := FALSE;
END_VAR
IF Temp = TRUE THEN
SuperAddWString(ADR(aaa1), ADR(aaa2));
Temp := FALSE;
END_IF
Функция:
Код:
FUNCTION SuperAddWString : BOOL //Добавление второй строки в хвост первой
VAR_INPUT
AddressMain: POINTER TO BYTE; //Главная строка
AddressAdd: POINTER TO BYTE; //Добавочный кусочек
END_VAR
//Длины строк
VAR
Len1 : DWORD; //Длина главной строки
Len2 : DWORD; //Длина добавленного кусочка
END_VAR
//Массив двух нулевых байтов
VAR CONSTANT
Null : ARRAY[0..1] OF BYTE := [0, 0];
END_VAR
//Считаем длины строк
Len1 := TO_DWORD(STU.StrLenW(AddressMain)) * 2;
Len2 := TO_DWORD(STU.StrLenW(AddressAdd)) * 2;
//Присваиваем
Memutils.MemCpy(AddressMain + Len1, AddressAdd, Len2);
//Последние два байта запишем как нули
Memutils.MemCpy(AddressMain + Len1 + Len2, ADR(Null), 2);
//Бесполезный выход функции
SuperAddWString := FALSE;