簡體   English   中英

有人可以向我解釋此代碼嗎?

[英]Can anybody explain me this code?

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 ++知識不存在...

它遍歷數組,分配上一迭代的值加上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|

啊!!!

不,它不會導致任何未定義或未指定的行為。 這真的很丑。

一目了然,它看起來像回路將tTab到的內容連續子tBuf ,每個比以前的通過長度短tSize 它不會拆分子字符串,而只會將索引設置為tBuf

但是不知道任何C16_*函數的作用,我無法猜測其余的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM