Click to See Complete Forum and Search --> : tokenizing a string


armyant
November 15th, 2001, 09:40 PM
I have troubled with tokenizing a string.
The process is that I take a string pointer and then, the one is tokenized with " ". The separated strings are modified and they are combined as original string form. By the way, I have a problem in managing memory.

Please let me advise how can I solve it.

Thank you

Manish Malik
November 17th, 2001, 02:10 AM
Can you please post the portion of the code that's giving you problems OR you want imporovement to ?


Manish
http://www.manishmalik.com

armyant
November 18th, 2001, 08:45 PM
hello,

First of all, thank you for your concern.

I am posting the code that I tried.
I'd like to improve it related to memory management.

void example(*sptr_tcp_packet)
{
char *token_string[14], *sepatated_string[14];
char *new_ip_address;
char end_of_string[4];
char *temp_buffer;
char data_length_in_string[3];
char *delimiter;
char *version;
char ip_string[32];

ULONG global_ip_address;
USHORT new_ip_string_length;
USHORT data_length_in_decimal;
USHORT string_length;
USHORT new_ip_total_length;
USHORT new_data_string_length;

string_length = sptr_tcp_packet->ip_header.total_length - 40;

temp_buffer = (char *) buffer_malloc (string_length + 1) ;

memcpy(temp_buffer, (char *) &sptr_tcp_packet->options_or_data.tcp_data, string_length);

delimiter = (char *)strpbrk (temp_buffer, " ");

token_string[0] = (char *)strtok (temp_buffer, " ");
token_string[1] = delimiter + 1;

for(i = 1; i<13; i++) {
delimiter = (char *)strpbrk (token_string[i], " ");
token_string[i+1] = delimiter + 1;
}

sepatated_string[0] = token_string[0];
for(i=1; i<14; i++) {
sepatated_string[i] = (char *)strtok(token_string[i], " ");
}


for(i=0; i<14; i++)
printf("sepatated_string_1 %i ---- %s \n", i, sepatated_string[i]);


/* take the IP address which has to be changed */
global_ip_address = 0xd3d4c4c5;
convert_ip_address_to_dot_format(&ip_string[0], global_ip_address);
strcpy(new_ip_address, &ip_string[0]);

new_ip_string_length = strlen(new_ip_address);


/*Calculate new msn data length */

data_length_in_decimal = 250;
sprintf (&data_length_in_string[0], "%d", data_length_in_decimal);

string_length = sptr_tcp_packet->ip_header.total_length - 40;
// printf("string_length %d \n", string_length);

{
char new_data_string[string_length];

strcpy(new_data_string, sepatated_string[0]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[1]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[2]);
strcat(new_data_string, " ");
version = (char *)strstr(sepatated_string[3], "MIME-Version");
strcat(new_data_string, &data_length_in_string[0]);

end_of_string[0] = 0x0d;
end_of_string[1] = 0x0a;

strncat(new_data_string, &end_of_string[0], 2);
strcat(new_data_string, version);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[4]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[5]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[6]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[7]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[8]);
strcat(new_data_string, " ");
strcat(new_data_string, new_ip_address);

end_of_string[0] = 0x0d;
end_of_string[1] = 0x0a;

strncat(new_data_string, &end_of_string[0], 2);
strcat(new_data_string, "Port: ");

strcat(new_data_string, sepatated_string[10]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[11]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[12]);
strcat(new_data_string, " ");
strcat(new_data_string, sepatated_string[13]);

new_data_string_length = strlen(new_data_string);

strncpy((char *) &sptr_tcp_packet->options_or_data.tcp_data, new_data_string, new_data_string_length);

buffer_free((char *)temp_buffer);
}
}