素直にTStringList渡せば?という気もするが、なんか理由があるんだろうな。

listpを設定している部分は
>listp->Delimiter = ' ';
>listp->DelimitedText = as;
で、置き換えられそう。

>argvp[i] = listp->Strings[i].c_str();
c_strが返すポインタは「その文でしか有効でない」というのが仕様。
ヘルプ参照。