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