2014-03-05 4 views
0

Есть ли простой способ разбора строки в пары k, v?C: разбор строки в пары значений ключа

GET/HTTP/1.1 
Host: localhost:1337 
User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Firefox/24.0 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 
Accept-Language: en-gb,en;q=0.5 
Accept-Encoding: gzip, deflate 
Cookie: JSESSIONID.e5614f49=1ns34hepyv53k1hg1o78k3z4zy; screenResolution=1920x1080 
Connection: keep-alive 
+1

Как вы хотите разделить ключи и значения? У первой толстой кишки? – Bucket

+0

первые пробелы. То есть («Хост:», «localhost: 1337») – chuckfinley

+0

Вам, вероятно, не нужно и, следовательно, не следует писать все, что это на C. Напишите прототип на языке более высокого уровня - я рекомендую либо Python, либо Ruby - и затем профилируйте его и *, только если это необходимо, * напишите модуль ускорителя в C для самых дорогих операций. Это будет проще, результат будет иметь меньше ошибок, и вы сможете задать гораздо более конкретные вопросы о том, как выполнить дорогостоящую часть в C. – zwol

ответ

3

"Easy" зависит от того, насколько надежным и безопасным вы хотите, чтобы ваш код был.

Вы можете использовать strchr() в цикле, чтобы многократно находить пробелы и символы новой строки и memcpy(), чтобы скопировать эти части строки в структуру, в которой вы хотите.

Или вы можете использовать strtok(), чтобы уничтожить строку на месте, собирая в нее указатели.

Или вы можете получить более подробную информацию. Вот ссылка на код в Apache HTTPd, чтобы выполнить именно эту задачу: http://svn.apache.org/repos/asf/httpd/httpd/trunk/server/apreq_parser_header.c

Смежные вопросы