从char缓冲区中提取整数
我在C中有一个非常简单的问题。我正在按行读取文件,并将其存储在缓冲区中
char line[80];
每行具有以下结构:
Timings results : 2215543 Timings results : 22155431 Timings results : 221554332 Timings results : 2215543
我想要做的是从这一行中提取整数值。 这里的C是否提供允许我这样做的任何简单function?
谢谢
每行可以使用sscanf,例如:
#include int time = -1; char* str = "Timings results : 120012"; int n = sscanf(str, "Timings results : %d", &time);
在这种情况下,n == 1表示成功
是的 – 尝试atoi
int n=atoi(str);
在您的示例中,您在整数之前有一个固定的前缀,因此您可以在将其传递给atoi之前简单地向szLine添加偏移量,例如
int offset=strlen("Timings results : "); int timing=atoi(szLine + offset);
相当高效,但不能很好地处理不符合预期的线条。 您可以先检查每一行:
const char * prefix="Timings results : "; int offset=strlen(prefix); char * start=strstr(szLine, prefix); if (start) { int timing=atoi(start+offset); //do whatever you need to do } else { //line didn't match }
您还可以使用sscanf来解析这样的行,这样可以使代码更加简洁:
int timing; sscanf(szLine, "Timings results : %d", &timing);
最后,另请参阅将整数解析为字符串C以获取更多想法。