用sscanf提取“bytes 0-22/56\r\n\r\n”中的56
时间: 2024-10-22 16:27:13 浏览: 17
`sscanf`函数通常用于从字符串中按照特定模式读取数据到变量中,它并不直接支持提取数字范围内的值。但是,你可以先解析出整个数值部分,然后手动计算指定范围。这里假设字符串"56"总是紧跟在"bytes"之后,可以这样做:
```c
#include <stdio.h>
#include <string.h>
int main() {
char str[] = "bytes 0-22/56\r\n\r\n";
char buffer[20]; // 假设最大值不会超过20位
int value;
if ( sscanf(str, "%s bytes %d/%d", buffer, &value, &value) == 3 && strlen(buffer) == 4 ) { // 检查是否正确读取了"bytes"和两个数值
int start = atoi(buffer + 5); // 提取从"0-"开始的数值,忽略"0-"
int range = value - start; // 计算范围
printf("Range is from %d to %d\n", start, start + range);
} else {
printf("Failed to extract the value.\n");
}
return 0;
}
```
在这个例子中,我们首先尝试使用`sscanf`提取字符串中的"bytes"、第一个数字和第二个数字。然后计算起始位置并减去起始值得到范围。
注意:这个代码假设输入格式始终如示例所示,如果实际输入格式有变,可能需要调整正则表达式匹配。
阅读全文