1. Обязательно представиться на русском языке кириллицей (заполнить поле "Имя").
  2. Фиктивные имена мы не приветствуем. Ивановых и Пупкиных здесь уже достаточно.
  3. Не писать свой вопрос в первую попавшуюся тему - вместо этого создать новую тему.
  4. За поиск, предложение и обсуждение пиратского ПО и средств взлома - бан без предупреждения.
  5. Рекламу и частные объявления "куплю/продам/есть халтура" мы не размещаем ни на каких условиях.
  6. Перед тем как что-то написать - читать здесь и здесь, а студентам - обязательно здесь.
  7. Не надо писать в ЛС администраторам свои технические вопросы. Администраторы форума отлично знают как работает форум, а не все-все контроллеры, о которых тут пишут.

Strcat на Си

Ответить

Автор темы
makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Strcat на Си

Сообщение makesstr »

Имею такой скрипт, цель - получить название двух тегов:
@NOTP::FQGT_HART_6n.PV
@NOTP::FQGT_HART_6n.SV

Сам скрипт
[+]
char *ParentWindowName, *ParentWindowTagprefix;
char *TagNamePV = "@NOTP::FQGT_HART_";
char *TagNameSV = "@NOTP::FQGT_HART_";
char *RiserNumberValue;

ParentWindowName = GetParentPictureWindow(lpszPictureName); //Return-Type: char*
ParentWindowTagprefix = GetPropChar("START",ParentWindowName,"TagPrefix"); //Return-Type: char*
RiserNumberValue = GetTagChar("RiserNumber"); //=6n

strcat(TagNamePV,RiserNumberValue);
strcat(TagNamePV,".PV");
printf("PV=%s",TagNamePV);

//strcat(TagNameSV,RiserNumberValue);
//strcat(TagNameSV,".SV");
//printf(" SV=%s", TagNameSV);
В случае работы strcat с одной переменной (TagNamePV) все ок, результат получается такой как нужно
PV=@NOTP::FQGT_HART_6n.PV

Но когда расскомменчиваю часть работы с SV, получается такая дребедень
PV=@NOTP::FQGT_HART_6n.PV SV=n.PV6n.SV

Т.е должно быть
SV=@NOTP::FQGT_HART_6n.SV
А получается SV=n.PV6n.SV

Как с этим бороться?
WinCC 7.4 SP1 Upd15, Step5.6
Аватара пользователя

aranea
знаток Eplan
знаток Eplan
Сообщения: 1136
Зарегистрирован: 21 сен 2012, 22:45
Имя: aranea
Благодарил (а): 30 раз
Поблагодарили: 165 раз

Strcat на Си

Сообщение aranea »

makesstr писал(а): 02 мар 2020, 08:09 char *TagNamePV = "@NOTP::FQGT_HART_";
char *TagNameSV = "@NOTP::FQGT_HART_";
скорее всего это ограничивает длину буфера указанной строкой, а вы еще в конец дописываете
читайте про память и маллоки всякие

лучше уж так (что-то удалил так как в этом куске кода не использовалось)

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

char TagNamePV[256], TagNameSV[256];
char *Tagprefix = "@NOTP::FQGT_HART";
char *RiserNumberValue;

RiserNumberValue = GetTagChar("RiserNumber"); //=6n

sprintf(TagNamePV, "%s_%s.%s", Tagprefix, RiserNumberValue, "PV");
printf("PV = %s\n",TagNamePV);

sprintf(TagNameSV, "%s_%s.%s", Tagprefix, RiserNumberValue, "SV");
printf("SV = %s\n",TagNamePV);
Изображение

Автор темы
makesstr
осмотрелся
осмотрелся
Сообщения: 194
Зарегистрирован: 19 сен 2019, 10:09
Имя: Макс
Страна: Россия
город/регион: Славянск-на-Кубани
Благодарил (а): 5 раз
Поблагодарили: 34 раза

Strcat на Си

Сообщение makesstr »

aranea писал(а): 02 мар 2020, 09:53
makesstr писал(а): 02 мар 2020, 08:09 char *TagNamePV = "@NOTP::FQGT_HART_";
char *TagNameSV = "@NOTP::FQGT_HART_";
скорее всего это ограничивает длину буфера указанной строкой, а вы еще в конец дописываете
читайте про память и маллоки всякие

лучше уж так (что-то удалил так как в этом куске кода не использовалось)

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

char TagNamePV[256], TagNameSV[256];
char *Tagprefix = "@NOTP::FQGT_HART";
char *RiserNumberValue;

RiserNumberValue = GetTagChar("RiserNumber"); //=6n

sprintf(TagNamePV, "%s_%s.%s", Tagprefix, RiserNumberValue, "PV");
printf("PV = %s\n",TagNamePV);

sprintf(TagNameSV, "%s_%s.%s", Tagprefix, RiserNumberValue, "SV");
printf("SV = %s\n",TagNamePV);
Спасибо, это решило проблему. Какая замечательная функция sprintf)
WinCC 7.4 SP1 Upd15, Step5.6
Ответить

Вернуться в «WinCC»