以下是代码段.
#define TABLE_DELIMITER "::"
int parse_n_store ( char *line )
{
int i = 0;
char *p = NULL;
CPTR sensor_number = NULL , event_catagory = NULL, sensor_type = NULL, event_state= NULL, assertion = NULL, message_number = NULL, short_text = NULL;
for (p = strtok(line,TABLE_DELIMITER); p != NULL; p = strtok(NULL, TABLE_DELIMITER), i++ )
{
if ( i == 0 )
sensor_number=p;
else if ( i == 1 )
sensor_type = p;
else if ( i == 2 )
event_catagory = p;
else if ( i == 3 )
event_state = p;
else if ( i == 4 )
assertion = p;
else if ( i == 5 )
message_number = p;
else if ( i == 6 )
short_text = p;
}
printf ("%s %s %s %s %s %s %s\n", sensor_number, event_catagory, sensor_type, event_state, assertion, message_number, short_text);
}
Run Code Online (Sandbox Code Playgroud)
这很好用.但是,当"行"参数为"前面板内存状态:检测到可纠正的ECC /其他可纠正的内存错误;传感器(70,内存)"时
输出将是
70 SENSOR_SPECIFIC MEMORY STATE_00 True 8543前面板内存状态
其中short_text变量仅包含"前面板内存状态"而不是"前面板内存状态:检测到可纠正的ECC /其他可纠正的内存错误;传感器(70,内存)"
为什么strtok考虑将单个冒号作为分隔符?谁能解决这个问题.
为什么strtok考虑将单个冒号作为分隔符?
因为它在标准(C11)中指定:
7.24.5.8 strtok函数
[...]
- 对strtok函数的一系列调用将s1指向的字符串分解为一系列标记,每个标记由s2指向的字符串中的字符分隔.序列中的第一个调用具有非null的第一个参数; 序列中的后续调用具有null第一个参数.s2指向的分隔符字符串可能与呼叫不同.