代码之家  ›  专栏  ›  技术社区  ›  VVS

有人能解释一下这个密码吗?

  •  0
  • VVS  · 技术社区  · 14 年前
    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->insthdl包含一些转换为字符串数组(char**)的原始数据。

    我不明白的是最后一个循环。它是做什么的?它是用来干什么的?我必须承认我的C++知识是完全不存在的…

    2 回复  |  直到 14 年前
        1
  •  4
  •   Edward Strange    14 年前

    它在数组中循环,分配上一次迭代的值和tsize。这意味着什么,为什么……我该怎么知道?

    我不会对自己太苛刻,因为我无法理解这些代码。很难读懂。

    编辑:

    哦,伙计。只需阅读一条评论到操作,并看它更多。这个代码太可怕了!!!!

    下面是发生的事情: 数组被读取到tbuf中。 然后创建一个数组数组来保存tcount2数组。 然后,tsize初始化为tlen2/tcount2,这基本上创建了tcount2项……您将看到。

    然后将tbuf指针分配给ttab“数组”中的第一个元素。

    现在for循环……for循环基本上分解了系列中的第一个元素,并在每个tlen2/tcount2段向主tbuf提供点。

    你得到的是…

    [0] [1] [2] [3] [4]
     |   |   |   |   |
     v   v   v   v   v
    |datadatadatadatadata|
    

    呸!!!!

    不,它不会导致任何未定义或未指定的行为。真的很难看。

        2
  •  0
  •   greyfade    14 年前

    乍一看,它看起来像是循环集 tTab 到内容的连续子字符串 tBuf ,每个长度都比前一个短 tSize . 它不拆分子字符串,只将索引设置为 TBUF .

    但不知道 C16_* 函数是这样的,其余的我就猜不出来了。