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);
}
}