Go4Expert

Go4Expert (http://www.go4expert.com/)
-   C (http://www.go4expert.com/forums/c/)
-   -   QUESTION: C string manipulation. (http://www.go4expert.com/forums/question-c-string-manipulation-t14630/)

wgre0111 20Oct2008 03:32

QUESTION: C string manipulation.
 
Greetings,

I am making an update to a ESQLC program that is using topend to communicate with Windows..

I have been having a problem separating a string.

I have column on a table that holds the address of a printer in the following format. 111.111.111.111:4000
Its not always guaranteed to be that length.

I pull that list back via FETCh into.... but NOW i want to split it into two different variables. One with the IP and the other with the Port.
so char oIPnPort[] = "111.123.123.123:5000";
would be split up and copied into two separate variables

char oIP[] = "111.1223.123.123";
char oPort[] = "5000";


Could someone give me an example of how to do this via C???

Use of pointers or anything else would be ok... just need help...

This split would remove the : between the port and IP as well... I know I want to copy whats to the right of the : in one variable"port" and whats to the left of the : in IP.

THANKS!

oogabooga 20Oct2008 07:03

Re: QUESTION: C string manipulation.
 
Low-level:
Code:

void split_addr (char *ip_port, char *ip, char *port)
{
    while (*ip_port && *ip_port != ':')
        *ip++ = *ip_port++;
    *ip = 0;

    if (*ip_port++) // if not pointing at null char
        while (*ip_port)
            *port++ = *ip_port++;
    *port = 0;
}

Using the library function strtok():
Code:

#include <string.h>

void split_addr (char *ip_port, char *ip, char *port)
{
    char *p;
    p = strtok (ip_port, ":");
    strcpy (ip, p);
    p = strtok (NULL, "");
    if (p) strcpy (port, p);
    else  *port = 0;
}

Call either like this:
Code:

char oIPnPort[] = "111.123.123.123:5000";
char oIP[30];
char oPort[10];
split_addr (oIPnPort, oIP, oPort);



All times are GMT +5.5. The time now is 23:07.