使用变量字段C和sscanf提取子字符串

使用变量字段C和sscanf提取子字符串,c,C,我想从HTTP请求/响应中提取一个特定字段 i、 e 作为一个字符*:我只想把“224”放在一些变量中 我有如下代码: int extract_content_size(Buffer *header) { char* line = "GET /Content-Length: 224\n"; int val ; int ret = sscanf(line, "%*[^Content-Length: ]%[%d]%*[^\n]",&val); printf("%s",line);

我想从HTTP请求/响应中提取一个特定字段

i、 e

作为一个字符*:我只想把“224”放在一些变量中

我有如下代码:

int extract_content_size(Buffer *header)
{
    char* line = "GET /Content-Length: 224\n";
int val ;

int ret = sscanf(line, "%*[^Content-Length: ]%[%d]%*[^\n]",&val);
printf("%s",line);
printf("THE EXTRACTED THING IS %lld\n", val) ;
    return ret;
}
也就是说,丢弃所有的东西,直到

这是一个类似问题的翻版:

(也就是说,这一小部分有很好的记录)

具体而言,我的输出是:

GET /Content-Length: 224
THE EXTRACTED THING IS 925
我相信这里可能是regex的错;但下面的指南似乎是正确的

我真的只关心这里的内容和长度


以下是一些进一步的细节:


它适用于测试用例。我在问题上加了完整的部分。谢谢
sscanf
返回的值是多少?我怀疑它是零,这就是为什么
val
是一个无意义的值。这意味着您要扫描的字符串与指定的格式不匹配。它确实为零!验证
header->data
是否为预期格式。如果没有,则必须(1)进行更多预处理或(2)更改sscanf格式字符串。作为旁注,始终建议检查可能失败的函数的返回值。这有助于更快地识别错误。我添加了一个带有解决方案的答案,谢谢
GET /Content-Length: 224
THE EXTRACTED THING IS 925
Location: http://www.google.com/imghp
Cache-Control: private
Content-Type: text/html; charset=UTF-8
P3P: CP="This is not a P3P policy! See g.co/p3phelp for more info."
Date: Sun, 22 Sep 2019 22:05:47 GMT
Server: gws
Content-Length: 224
X-XSS-Protection: 0
X-Frame-Options: SAMEORIGIN
Set-Cookie: 1P_JAR=2019-09-22-22; expires=Tue, 22-Oct-2019 22:05:47 GMT; path=/; domain=.google.com; SameSite=none
Set-Cookie: NID=188=VSRygM_9FrfzeRwgcE8mFcDzXgPD86b7oRDIIE8EaIyIrkBbNFbs_cWkKWb47Fb_tmYY7lKL9xmjKUMy8yhb9Jpm-Bkh4-NXDqHSFW1HD_BddPfdGNqLG_DHz-7dMTedVaV4_SVaETs_gPzDi8oxh8XB_z5UYQIUD0EcK-86qFI; expires=Mon, 23-Mar-2020 22:05:47 GMT; path=/; domain=.google.com; HttpOnly

<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
<TITLE>302 Moved</TITLE></HEAD><BODY>
<H1>302 Moved</H1>
The document has moved
<A HREF="http://www.google.com/imghp">here</A>.
</BODY></HTML>
THE EXTRACTED THING IS 3