У меня есть длинная строка с информацией, как это (регулярное выражение?):Удалить часть строки в C
"GET http://www.google.se/ HTTP/1.1\r\n
Host: www.google.se\r\n
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:2.0) Gecko/20100101 Firefox/4.0\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8\r\n
Accept-Language: en-us,en;q=0.5\r\n
Accept-Encoding: gzip, deflate\r\nAccept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7\r\n
Keep-Alive: 115\r\n
Proxy-Connection: keep-alive\r\n
Cookie: PREF=ID=7d6a62c557413bc8:FF=0:TM=1327968040:LM=1327968040:S=U1A51rCRDDMTF295\r\n
Cache-Control: max-age=0\r\n\r\n"
И я хочу, чтобы избавиться от Keep-Alive части под Proxy-Connection .. Это то, что я делаю до сих пор:
- Получение строки (заголовка) к функции.
- Создание с двумя-структуру строк (заголовок и хоста)
- положить имя хоста из заголовка в принимающей части (очевидно)
- и поставить заголовок в части заголовка.
И теперь я хочу избавиться от части keep-alive, прежде чем поместить заголовок в заголовочную часть структуры.
Любые идеи?
И вот какой код я сделал до сих пор. Я новичок в C, так не может быть самым красивым из кода, который вы уже видели ..
struct ParsedHeader header_parser(char * input) {
struct ParsedHeader h;
int status;
regex_t regex;
char * result_begin = NULL;
regcomp(®ex, "host:", REG_EXTENDED|REG_ICASE|REG_NOSUB);
if((status = regexec(®ex, input, (size_t) 0, NULL, 0)) == 0) {
char end = '\r';
char * header = malloc(strlen(input));
char * begin = "host:";
size_t result_size = 0;
memcpy(header, input, strlen(input));
to_lower(input, header, strlen(input));
result_begin = (strstr(header, begin) + 6);
char * result_end = strchr(result_begin, end);
result_end[0] = '\0';
//char result[strlen(result_begin)] = result_begin;
free(header);
}
regfree(®ex);
h.header = input;
h.host = result_begin;
return h;
}
Может быть, если вы разместил здесь наиболее важные части вашего кода, этот вопрос привлечет больше внимания. –
Вы хотите избавиться от этой конкретной строки 'KeepAlive: 115' или любого возможного значения для KeepAlive? –
Ошибка: измените ваш malloc на malloc (strlen (input) +1), так как вам нужно выделить место для завершающего нуля. –