我有Tcl_Interp
的结构,我不知道拿着什么。我试图打印一个interp.result
的字符串值,但它没有返回任何内容。我正在使用这个功能:
void debug_state(char *state);
像这样:
debug_state(Tcl_GetStringResult(g_game.tcl_interp));
但它没有返回任何东西。是否有其他方法可以查看除tcl_interp
char *Tcl_GetStringResult(interp)
的字符串值
答案 0 :(得分:1)
除了解释器的不透明句柄之外,你不应该使用Tcl_Interp *。曾几何时,您使用interp->结果来访问结果,但这已经被弃用了十多年。正如您所发现的,Tcl_GetStringResult通常更好,应该使用Tcl_GetObjResult。通常,在新代码中,您应该尝试使用Tcl_Obj函数而不是字符串函数,因为这可以避免在不必要时与字符串类型之间的转换。
您的代码应该没问题,前提是debug_state在函数返回后不希望结果值有效。我会说,如果你看到一个空字符串,那么这就是你的翻译结果中的内容。您可以通过将其设置为例如:Tcl_SetObjResult(interp, Tcl_NewStringObj("testing, testing...", -1));
之前的内容来检查。如果你然后调用Tcl_GetStringResult(interp),你应该得到一个指向上述字符串副本的char *指针。