2010-11-29 35 views
0
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++の知識が全く存在しないことを認めなければなりません。

+1

「C16 _...」関数が何をしているか知らなくても、何かを言うのは本当に難しいです。 – casablanca

+0

これは非常に具体的な質問ですので、 'tTab'には値の束があると推論することができますが、それらの数値が本当に何を意味するのかはわかりません。また、 'tTab [tLoop] = tTab [tLoop-1] + tSize;' tTab'が 'malloc'割り当てられているので、' tTab [0] 'にアクセスすると予期しないメモリが初期化されていないため、未定義の動作です。 – birryree

+5

Urgh。猫がもう一度キーボードにいたように見える。そしてそれは 'malloc()'を使っているのでC catでもあります。まあ、static_cast <>を使っているので、まあまあです。私はコードが醜いと言いましたか? – sbi

答えて

4

これは前回の反復の値にtSizeを代入して配列をループします。それはどういう意味ですか、なぜ...どうして私は知るべきですか?

私は、そのコードを理解できないほど自分自身ではあまり難しくありません。読むのはとても難しいです。

編集:

ああ男。 OPのコメントの1つを読んでもう少し見てみましょう。このコードは厄介です!

次のようなことが起こりそうです: 配列が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 !!!

いいえ、定義されていない動作または不特定の動作は発生しません。それはちょうど本当に醜いです。

+0

今、私はそれを手に入れます。愚かなポインタの操作..あなたは 'aCCB - > InstHdl'からデータを配列に分割する方法をわかりますか? (Managed C++) – VVS

+0

私はマネージC++をしません。あなたは 'std :: string(tab [0]、tab [1])'でセクションを文字列に分割することができます。 –

0

ループのように、tBufという内容の連続した部分文字列には、長さがtSizeより短いものがあります。部分文字列は分割されませんが、インデックスはtBufにのみ設定されます。

しかし、C16_*の機能の何がわからなくても、私は残りの部分を推測することはできません。

関連する問題