只是想获得时间价值。看C库表没有直接的答案。
64 bytes from 58.27.61.104: icmp_seq=3 ttl=59 time=45.5 ms
答案 0 :(得分:0)
使用标准string.h
函数strstr
在字符串中查找子字符串。当找到时,返回指向所定位子字符串的第一个字符的指针。添加子字符串长度,使其指向紧跟在该子字符串后面的字符。
然后使用strtod
将ASCII字符串转换为double值。 strtod
忽略前导空格并将使用当前区域设置:
..在字符串中引出空白字符 (由isspace(3)函数定义)被跳过。小数点 字符在程序的区域设置中定义(类别LC_NUMERIC) (来自OS X上的
man strtod
)
一个健壮的程序应检查无效输入(即,time=
后面没有数字,或者double
中无法表示该值),但为清楚起见,此处省略了错误检查。
在代码中:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main (void)
{
char *input = "64 bytes from 58.27.61.104: icmp_seq=3 ttl=59 time=45.5 ms";
char *looking_for = "time=";
char *pos_of_time;
double the_time;
pos_of_time = strstr (input, looking_for);
if (pos_of_time == NULL)
{
printf ("No match for 'time=' found\n");
} else
{
/* pos_of_time points to the 't' */
/* we need to look beyond the string */
pos_of_time += strlen(looking_for);
the_time = strtod (pos_of_time, NULL);
printf ("time is %f\n", the_time);
}
return 0;
}
显示预期的输出:
time is 45.500000