あるソースのmain関数を無理やり別のプログラムに移して
名前を変えて使いたいと思っています。
array<System::string> から char**への変換を行いたいと思っています。

void hoge(int argc, char *argv[]);
void wrap(array<System::String^> strArray)
{
int argc = strArray->Length;
char **argv = (char**)malloc(sizeof(char)*argc);

for(int i=0;i<argc;i++)
{
argv[i] = new char[256];
sprintf(argv[i],"%s",strArray[i]);
}
hoge(argc,argv);
}

こんな感じでhoge()のargc,argv引数を作りたいんですが、
sprintfの時点でargvが全部書き変わってしまいます。
ポインタの使いかたおかしいんでしょうか?
間違いないしエレガントな方法ありましたら指摘してください。
よろしくお願いいたします