QUESTION: C string manipulation.

wgre0111's Avatar, Join Date: Oct 2008
Light Poster
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!
0
oogabooga's Avatar
Ambitious contributor
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);
wgre0111 like this