It also wouldn't work. This just reassigns your local copy of argv[0] to a different memory location. Also, in what circumstances can argc be 0?
int main()
{
char *args[] = { 0 };
execve("./zero", args, 0L);
}
zero will have argc == 0.