Кто-нибудь может объяснить мне этот код? - PullRequest
0 голосов
/ 29 ноября 2010
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 ]

4 голосов
/ 29 ноября 2010

Он проходит по массиву, присваивая значение предыдущей итерации плюс tSize. Что это значит или почему ... как, черт возьми, я должен знать?

Я бы не стал слишком жестко относиться к себе, если бы не смог разобраться в этом коде. Это очень трудно читать.

Edit:

Ох, чувак. Просто прочитайте один из комментариев к ОП и посмотрите на него еще немного. Этот код УЖАСНЫЙ !!!

Вот что, кажется, происходит: Массив читается в tBuf. Затем создается массив массивов для хранения массивов tCount2. Затем tSize инициализируется в tLen2 / tCount2, который создает в основном элементы tCount2 ... вы увидите.

Затем указатель tBuf назначается первому элементу в массиве массивов tTab.

Теперь цикл for .... цикл for в основном разделяет первый элемент в серии и обеспечивает точки в основной tBuf на каждом сегменте tLen2 / tCount2.

То, что вы получаете ...

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

UGH !!!

И нет, это не вызывает неопределенного или неопределенного поведения. Это просто ужасно.

0 голосов
/ 29 ноября 2010

На первый взгляд, похоже, что цикл устанавливает tTab в последовательные подстроки содержимого tBuf, каждая из которых короче предыдущей по длине tSize. Он не разбивает подстроки, а только устанавливает индексы на tBuf.

Но, не зная, что делает любая из функций C16_*, я не могу догадаться об остальных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...