Перемещение содержимого {tempStr} в char str[] в Load Runner

Я новичок в HP Load Runner и пытаюсь преобразовать существующий код C, чтобы он был совместим с Load Runner. У меня есть массив tempStr из Load Runner, содержимое которого я пытаюсь поместить в char str[1024]. Я пытался использовать strcpy(lr_eval_string("{tempStr}"),str);, но содержимое str по-прежнему пусто. Кто-нибудь знает, как я могу поместить содержимое tempStr в str?

РЕДАКТИРОВАТЬ: Мой код:

char str[1024];
strcpy(str,lr_eval_string("{c_Response}"));

Я получаю следующие ошибки:

Ccode.c(22): Error: C interpreter run time error: Ccode.c (22):  Error -- memory violation : Exception ACCESS_VIOLATION received.
Ccode.c(22): Error: An exception was raised while calling invocation function in interpreter extension cciext.dll: System Exceptions: EXCEPTION_ACCESS_VIOLATION.

person Sakura    schedule 27.06.2013    source источник
comment
Все, что я могу сказать, это то, что в strcpy(string1,string2); содержимое строки 2 присваивается строке 1, поэтому строка в строке 2 остается неизменной.   -  person 0decimal0    schedule 27.06.2013


Ответы (3)


В strcpy(string1,string2); содержимое строки 2 присваивается строке 1. Поэтому, если вы хотите поместить содержимое массива символов tempStr в `str, вам нужно попробовать следующее:

strcpy(str,lr_eval_string("{tempStr}"));.Это должно сработать. Вы можете увидеть похожее использование оператора здесь.

Вы объявляете ОГРОМНЫЙ МАССИВ (char str[1024]) ИЛИ размер c_response может быть больше, чем str, и это может быть причиной, по которой вы получаете эту ошибку. Вместо этого вы можете динамически выделять память с помощью malloc, что является хорошей практикой и считается безопасным.

(Глядя на код, все выглядит просто отлично, поэтому, опять же, если вы не покажете весь код, довольно сложно сказать).

Объявление очень больших массивов в C - очень плохая практика. Просто взгляните на это: Сколько символов может быть в массиве символов?

person 0decimal0    schedule 27.06.2013
comment
Привет. Я пробовал это, но это не работает. Любые идеи, почему это не работает? - person Sakura; 27.06.2013
comment
Это утверждение должно работать в том, что касается его синтаксиса, вам нужно будет предоставить весь код, чтобы можно было внести улучшения, и вы также должны попытаться самостоятельно найти ошибки в другой части. - person 0decimal0; 27.06.2013
comment
Я дал ссылку в ответ. - person 0decimal0; 27.06.2013
comment
Я отредактировал свой оригинальный пост с кодом. Кажется, это не работает. - person Sakura; 27.06.2013
comment
Я думаю, что вы выделяете огромный размер для массива символов, и это плохая практика. Но если вы не покажете весь код, я имею в виду, каков размер параметра c_response, почти невозможно сказать, что происходит не так. Может быть, размер c_response может быть больше, чем размер str. - person 0decimal0; 27.06.2013
comment
Я только что понял, что мой c_Response больше, чем str. Я увеличил его до 5000. c_Response — это динамическая переменная, которая передается с веб-сервера напрямую, поэтому я не уверен, как получить размер c_Response. - person Sakura; 28.06.2013
comment
давайте продолжим это обсуждение в чате - person 0decimal0; 28.06.2013

Я проверил это, и оно работает отлично, и может быть какая-то другая проблема.

символ ул[1024]="тест";

lr_output_message("Значение %s", str);

strcpy(str,lr_eval_string("{NewParam}"));

lr_output_message("Value is %s", str);
person user2484633    schedule 27.06.2013

У вас несоответствие типов, strcpy ожидает два указателя.

Action()
{

    char str[500]="";

    lr_save_string("abcdefg123456789","my_foo");

    strcpy((char *)str,lr_eval_string("{my_foo}")); 

    lr_message(str);

    return 0;
}

Запустите вышеуказанное и посмотрите, что произойдет. Прежде чем двигаться дальше, поймите, почему (char *) решает проблему. Это возможность укрепить некоторые базовые навыки в C, которые вам понадобятся сейчас и в будущем.

person James Pulley    schedule 27.06.2013
comment
Поскольку вы новичок в LoadRunner и C, отложите LoadRunner на время и изучите C. Знание языка вашего тестового инструмента действительно является необходимым условием успеха, будь то C с LoadRunner, Pascal с SilkPerfomer или Java с Джметр. Попытка освоить базовые навыки одновременно с вашими навыками в сфере бизнеса — это верный путь к провалу в роли, независимо от того, является ли эта роль тестировщиком производительности или кем-то еще. - person James Pulley; 03.07.2013