我正在尝试在 Tcl API 的帮助下返回指针的地址。
下面是我的简单函数:
int simpleTest (Tcl_Interp* interp) {
Context ctx;
// init context
Init(&ctx);
// printf("%p\n", &ctx);
Tcl_SetObjResult(interp, Tcl_ObjPrintf("%p", &ctx));
return TCL_OK;
}
但是我有这样的消息:
无法使用提供的参数格式化“%p”
我相信 Tcl API 不支持 格式
%p
。
如何做?
根据您想要实现的目标以及实现的可移植性,您至少有两个选择:
a) 转换为整数类型(理想情况下:
intptr_t
)并使用格式说明符%x
。
b) 使用
sprintf
和 %p
来填充缓冲区,并将其传递到 Tcl 层(使用 %s
说明符):
char hexstr[20];
sprintf(hexstr,"%p", (void*)&ctx);
Tcl_SetObjResult(interp, Tcl_ObjPrintf("%s", hexstr));
我倾向于稍微偏向 b),因为如果目标是呈现
%p
的结果,并且鉴于 %p
被定义为“特定于实现”,您可能无法在Tcl级别。