converting a char[][] to a char**

Derek Parnell derek at psych.ward
Thu Apr 20 20:14:42 PDT 2006


On Fri, 21 Apr 2006 02:07:17 +0000 (UTC), glen wrote:

> Hi All,
> This seemingly simple thing is causing me alot of trouble.  Can someone show me
> how I can convert an array of char[][] to a char**.  
> 
> Here is the pseudo code...
> 
> void runWithArgs( char[][] args ) {
> char** execArgs;
> 
> // convert args to execArgs
> 
> execv( toStringz( "myprog" ), execArgs );
> 
> }
> 

On the assumption that 'char**' points to an array of 'char*' and that
array is terminated with a null pointer, then this might be what you are
looking for ...

-----------------
import std.string;
char** toArgList(char[][] pOrig)
{
    char*[] lTemp;
    lTemp.length = pOrig.length + 1;
    foreach(int i, char[] pc; pOrig)
    {
        lTemp[i] = toStringz(pc);
    }
    lTemp[$-1] = null;

    return lTemp.ptr;
}

void main(char[][] pArgs)
{
    char** lOldStyle;

    lOldStyle = toArgList(pArgs);

    // Use the counted method of accessing them.
    for(int i = 0; i < pArgs.length; i++)
    {
        printf("%d '%s'\n", i, *(lOldStyle+i));
    }

    // Use the terminating null method of accessing them.
    int j;
    char* cp;
    while(true)
    {
        cp = *(lOldStyle+j);
        if (cp == null)
            break;
        printf("%d '%s'\n", j, cp);
        j++;
    }

}
-----------------

-- 
Derek
(skype: derek.j.parnell)
Melbourne, Australia
"Down with mediocracy!"
21/04/2006 1:07:07 PM



More information about the Digitalmars-d mailing list