1

在我的 TCL 命令的 C 端实现中,例如,在以下签名中:

myfunc(ClientData c, Tcl_Interp *interp, int objc, Tcl_Obj * const objv[]);

我发现有时候objc大于传入的参数个数,对应的objv值不是“0”就是“1”。

我在谷歌搜索中找不到任何报告此类问题,应该在我的 TCL 方面有问题,但不知道是怎么回事。

我的 TCL 端使用 2 个参数或 3 个参数调用命令 -

myfunc arg1 "word1 word2"   
<... some code ...>
myfunc arg1  ""  "checker1 checker2"

第一次调用是 2 个参数,接下来是 3 个参数。

我提到的问题是当我期望 2 个参数时,我看到“objc”是 3,而“objv[3]”是“0”或“1”。

4

1 回答 1

1

我不知道这是否是您的问题(可能是拼写错误),但是当 objc 仅为 3 时,objv[3] 访问越界,因为当计数为 3 时,最大可访问索引为 2。您应该从objv[0] 访问数组内容。

于 2013-01-23T23:52:32.003 回答