[英]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.