C:将字符串解析为键值对

C:将字符串解析为键值对,c,parsing,C,Parsing,有没有一种简单的方法可以将字符串解析为k,v对 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 Accep

有没有一种简单的方法可以将字符串解析为k,v对

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
“容易”取决于您希望代码的健壮性和安全性

可以在循环中使用
strchr()
重复查找空格和换行符,并使用
memcpy()
将字符串的这些部分复制到所需的结构中

或者您可以使用
strtok()
在收集指针到字符串中的同时,将字符串切碎

或者你可以做得更详细一些。这里有一个指向Apache HTTPd中代码的链接,可以准确地执行此任务:

“容易”取决于您希望代码的健壮性和安全性

可以在循环中使用
strchr()
重复查找空格和换行符,并使用
memcpy()
将字符串的这些部分复制到所需的结构中

或者您可以使用
strtok()
在收集指针到字符串中的同时,将字符串切碎


或者你可以做得更详细一些。这里有一个链接,指向apachehttpd中执行此任务的代码:

您希望如何分割键和值?第一个冒号?第一个空格。例如(“主机:”,“localhost:1337”),您可能不需要,因此也不应该用C编写任何东西。用更高级的语言编写一个原型——我建议使用Python或Ruby——然后对其进行分析,只有在必要时,才用C编写一个加速器模块,用于最昂贵的操作。这将更容易,结果将有更少的错误,并且您将能够提出关于如何在C中完成代价高昂的部分的更具体的问题。使用strchr函数。您希望如何分割键和值?第一个冒号?第一个空格。例如(“主机:”,“localhost:1337”),您可能不需要,因此也不应该用C编写任何东西。用更高级的语言编写一个原型——我建议使用Python或Ruby——然后对其进行分析,只有在必要时,才用C编写一个加速器模块,用于最昂贵的操作。这将更容易,结果将有更少的错误,你将能够提出更具体的问题,关于如何做C中昂贵的部分。使用strchr函数。