aCCB->C16_ArgInfo(aCCB->InstHdl,2,&tType2,&tOpt2,&tLen2,NULL,&tCount2);
if (tType2 == _TypeAlpha &&
tOpt2 == (_ArgOptVAR | _ArgOptARRAY))
{
/* read array */
tBuf = static_cast<char*>(malloc(tLen2));
aCCB->C16_ArgRead(aCCB->InstHdl,2,0,tBuf);
tTab = static_cast<char**>(malloc(sizeof(char*) * tCount2));
tSize = tLen2 / tCount2;
*tTab = tBuf;
/* define sort table */
for (tLoop = 1; tLoop < tCount2; ++tLoop)
tTab[tLoop] = tTab[tLoop-1] + tSize;
我的理解是aCCB-&gt; InstHdl包含一些转换为字符串数组(char **)的原始数据。
我不明白的是最后一个循环。它有什么作用?它是为了什么?我不得不承认我的C ++知识是非常不存在的......
答案 0 :(得分:4)
循环遍历数组,分配上一次迭代的值加上tSize。这意味着什么或为什么......我该怎么知道?
我不会因为无法理解该代码而对自己太过刻薄。这很难读。
编辑:
哦,伙计。只需阅读OP中的一条评论,再看一下。这段代码很糟糕!!!
以下是似乎正在发生的事情: 数组被读入tBuf。 然后创建一个数组数组来保存tCount2数组。 然后将tSize初始化为tLen2 / tCount2,它基本上创建了tCount2项......你会看到。
然后将tBuf指针分配给tTab'数组数组'中的第一个元素。
现在for循环...... for循环基本上拆分了系列中的第一个元素,并在每个tLen2 / tCount2段的主tBuf中提供了点。
你得到的是......
[0] [1] [2] [3] [4]
| | | | |
v v v v v
|datadatadatadatadata|
UGH !!!
不,它不会导致任何未定义或未指定的行为。这真的很难看。
答案 1 :(得分:0)
乍看之下,循环看起来像tTab
到tBuf
内容的连续子串,每个子串比前一个短tSize
。它不会拆分子字符串,只会将索引设置为tBuf
。
但是在不知道任何C16_*
函数的作用的情况下,我无法猜测其余函数。