strtok орнына жолды көрсеткішпен біртіндеп оқу ыңғайлы. Алдымен "=>interface_ports" басталатын орынды тауып, сол жерге дейінгі бөліктен ғана pN=:мән жұптарын іздеңіз.
Мысалы:
const char *s = pSignature;
const char *end = strstr(s, "=>interface_ports");
if (end == NULL) end = s + strlen(s);
while (s < end) {
int index, value;
if (sscanf(s, "\\p%d =:%d", &index, &value) == 2 ||
sscanf(s, "\\p%d=:%d", &index, &value) == 2) {
printf("p%d = %d\n", index, value);
}
const char *next = strchr(s, ':');
if (next == NULL || next >= end) break;
s = next + 1;
}
Бұл тәсілде interface_ports бөлігіне жеткен соң талдау тоқтайды. Нақты деректерді массивке сақтау керек болса, index мәнін шекарадан тексеріп, мысалы values[index] = value; деп жазыңыз.
Егер бос орындар әртүрлі орналасуы мүмкін болса, sscanf пішіміндегі бос орындар оларды автоматты түрде өткізіп жібереді. Ал кіріс форматы күрделенсе, sscanf орнына әрбір таңбаны тексеретін шағын күйлік талдаушы сенімдірек болады.