Вы всегда можете добавить специальный аргумент «маркер» в конце списка, указывающий, что он завершен, например NULL
char **args = { "one", "two", NULL }
function( args );
...
void function ( char **args ) {
char *p;
int i = 0;
p = args[i];
while( p != NULL) {
...
i++;
p = args[i];
}
}