如何获取Tcl_Interp的字符串值

如何获取Tcl_Interp的字符串值,tcl,Tcl,我有一个Tcl\u Interp的结构,我不知道它包含什么。我试图打印interp.result的字符串值,但它没有返回任何内容。我正在使用此功能: void debug_state(char *state); 像这样: debug_state(Tcl_GetStringResult(g_game.tcl_interp)); 但它没有返回任何东西。除了char*tcl\u GetStringResult(interp)之外,还有其他方法可以查看tcl\u interp的字符串值吗。曾几何时,

我有一个
Tcl\u Interp
的结构,我不知道它包含什么。我试图打印
interp.result
的字符串值,但它没有返回任何内容。我正在使用此功能:

void debug_state(char *state);
像这样:

debug_state(Tcl_GetStringResult(g_game.tcl_interp));

但它没有返回任何东西。除了
char*tcl\u GetStringResult(interp)

之外,还有其他方法可以查看
tcl\u interp
的字符串值吗。曾几何时,您使用interp->result访问结果,但这已经被弃用了十多年。正如您所发现的,应该使用Tcl_GetStringResult,通常更好的是使用Tcl_GetObjResult。一般来说,在新代码中,您应该尝试使用Tcl_Obj函数而不是字符串函数,因为这样可以避免在不必要时与字符串类型进行转换


如果debug_state不希望函数返回后结果值有效,那么代码应该是正常的。我想说,如果你看到一个空字符串,那么这就是你的解释器结果。您可以通过将其设置为前面的内容来检查它,例如:
Tcl_SetObjResult(interp,Tcl_NewStringObj(“测试,测试…”,-1))。如果您随后调用Tcl_GetStringResult(interp),您应该会得到指向上述字符串副本的char*指针。

Tcl_GetStringResult(interp)
的替代方法是
Tcl_GetString(Tcl_GetObjResult(interp))
。我不记得前者是否已经转变为后者的别名…