gpt4 book ai didi

c - 使用 c 和 tcl,使用 Tcl_GetVar2 从文件获取数据时出错

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:33 24 4
gpt4 key购买 nike

在 c 中使用 Tcl_GetVar2 的最佳方法是什么?

 axes   = (Axes*)   malloc(sizeof(Axes));
axes->Xorientation = Tcl_GetVar2(interp, "axes", "XOrientation", TCL_GLOBAL_ONLY);

以轴为结构

typedef struct {
double XvaleurMin;
double XvaleurMax;
double XRatio;
char *Xorientation;
double YvaleurMin;
double YvaleurMax;
double YRatio;
char *Yorientation;
} Axes;

这是在解析包含缺失数据的数据文件时出现执行错误的示例。

例如Segmentation fault when doing

printf("axes->Yorientation %s\n",axes->Yorientation );

谢谢

最佳答案

虽然 Tcl_GetVar2 API 函数确实返回一个 char *,但您需要记住 Tcl 保留该指针的所有权:它可以并且将在其选择的时间释放它,可能是在您进行的下一次 API 调用时。另外,你真的应该把它当作 const char *;也不要修改那个字符串(有一些历史原因导致我们没有制作那个 const)。如果你想保留它,你需要立即复制它,这将需要一些缓冲区管理工作,有很多方法可以实现它。

或者您也可以使用 Tcl_GetVar2Ex,它返回一个 Tcl_Obj *,一个 Tcl native 值引用。有了这些,您可以保留它们(只要您记得在这样做时Tcl_IncrRefCount它们,并在您不再需要时Tcl_DecrRefCount它们它)然后你可以随时使用 Tcl_GetStringTcl_GetStringFromObj(后者还报告字符串中的字节数)。


如果您真的有兴趣解析该值以表示从一个小集合中选择的某种字符串——我在解析某种“方向”属性时期望的那种东西——我强烈建议查看 Tcl_GetIndexFromObj。它专为此类任务而设计,可以为您处理很多方面,而这些方面通常是烦人的繁琐工作才能让您自己适应。

关于c - 使用 c 和 tcl,使用 Tcl_GetVar2 从文件获取数据时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47780726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com