У меня есть метод c, который возвращает const char *
, и я импортировал эту функцию в свой код specman. После выполнения еще нескольких операторов в «e» значение в строке искажается. Я думаю, может быть, потому что это относится к указателю в пространстве C.
подпись С:
const char* myFun(const char* key)
{
static string myVal;
myVal = myDictionary[key];
return myVal.c_str();
}
in e:
myFun(key : string) : string is foreign dynamic C routine
в электронном использовании:
var str : string;
var str2 : string;
str = myFun("my_test");
outf("%s",str) ---> here it gives the correct value
str2 = myFun("my_test2");
----------
----------
outf("%s",str) ---> here it gives some garbage value, statements in the middle doesn't edit this string in anyway.
мысли о том, что не так с этим кодом?
static string myVal;
,myVal
сохраняется при различных вызовахmyFun
. Каждый раз, когда вы возвращаете его, вы возвращаете один и тот же указатель. Я подозреваю, что вы просто перезаписываете одну и ту же строку каждый раз, когда вызываетсяmyFun
. Удалитеstatic
и передайтеstring myVal
в качестве параметра. (нужен полный код, чтобы помочь дальше) - person David C. Rankin   schedule 19.10.2016myVal = myDictionary[key];
. Если это так, то память дляmyVal
перезаписывается при каждом вызовеmyFun
. Если вы разместите MCVE, мы можем помочь в дальнейшем (а не гадать). См.: < b>Как создать минимальный, полный и проверяемый пример. - person David C. Rankin   schedule 19.10.2016