나는 const char *
을 반환하는 c 메서드를 가지고 있으며이 함수를 내 specman 코드로 가져 왔습니다. "e"에서 더 적은 명령문을 실행 한 후 문자열의 값이 손상됩니다. 그것은 C 공간의 포인터를 참조하기 때문일 수도 있습니다.문자열을 specman 코드로
C 서명 :이 코드에 어떤 문제가 있는지에
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.
생각 : 전자 사용량
myFun(key : string) : string is foreign dynamic C routine
:
전자의const char* myFun(const char* key)
{
static string myVal;
myVal = myDictionary[key];
return myVal.c_str();
}
?
C 함수를 문제가있는 MCVE로 표시하십시오. –
은 c 함수 @WeatherVane에 대한 코드를 추가했습니다. – Harish
'static string myVal;을 선언하면'myVal'이'myFun'에 대한 다양한 호출에 걸쳐 보존됩니다. 반환 할 때마다 *** 같은 * ** 포인터. myFun이 호출 될 때마다 동일한 문자열을 덮어 쓰는 것 같아요. 'static'을 제거하고'string myVal'을 매개 변수로 전달하십시오. –