2014-01-18 22 views
0

我有一个临时字符串: temp =“2014年1月16日01 12 59 OP grs0”;使用sscanf()从字符串中分配月份名称和整数值?

我想通过使用sscanf()和任何其他可能的方式从该字符串检索年,月,日,时,分和秒。

我有一些伪代码:

 int ret_count = 0; 

    char discard_msg_type[ENTRY_SIZE]=" "; /* message type is irrelevant */ 

    *hour = *minute = *second = *month = *day = *year = -1 ; /* All these are integer pointers */ 

    ret_count = sscanf(temp,"%d %s %d %s %d %d %d",year,month, 
           day,discard_msg_type, 
           hour,minute,second); 

执行后我期待ret_count值为7,但它出来为1

回答

0

您的格式之间的类型不匹配的问题字符串和数据:

Data:  "2014 Jan 16 01 12 59 OP grs0" 
Format: "%d %s %d %s %d %d %d" 

你也有格式字符串和参数之间的类型不匹配的问题:

Format: "%d %s %d %s %d %d %d" 
Variables: int* int* int* char* int* int* int* 

您需要解决这两个问题。例如:

int yy, dd, hh, mm, ss; 
char mmm[6]; 

if (sscanf(temp, "%d %s %d %d %d %d", &yy, mmm, &dd, &hh, &mm, &ss) != 6) 
    ...report format error... 
else if ((*month = map_month_name(mmm)) == -1) 
    ...report unrecognized month name... 
else 
{ 
    *year = yy; 
    *day = dd; 
    *hour = hh; 
    *minute = mm; 
    *second = ss; 
} 

map_month_name()可能是:

int map_month_name(char const *mmm) 
{ 
    static char const *months[] = 
    { 
     "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" 
    }; 
    for (size_t i = 0; i < sizeof(months)/sizeof(months[0]); i++) 
    { 
     if (strcmp(mmm, months[i]) == 0) 
      return i + 1; 
    } 
    return -1; 
} 
+0

是的,这是工作乔纳森。你很棒。 – Ritesh

相关问题