借助 Tcl API 返回指针的地址

问题描述 投票:0回答:1

我正在尝试在 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

如何做?

c tcl
1个回答
0
投票

根据您想要实现的目标以及实现的可移植性,您至少有两个选择:

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级别。

© www.soinside.com 2019 - 2024. All rights reserved.