Systems IO
Parse Buffer
Text already loaded in memory can be parsed with the same checks as file input.
formatted text
`snprintf` builds a small line with predictable fields.
parsed fields
`sscanf` reports how many fields matched the expected format.
Parse Buffer
parse_buffer.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
int offset = 0;
char line[40];
int id = 0;
int value = 0;
snprintf(line, sizeof(line), "id=%d value=%d", 7, 20 + offset);
int fields = sscanf(line, "id=%d value=%d", &id, &value);
printf("fields=%d id=%d value=%d\n", fields, id, value);
return 0;
}
#include <stdio.h>
int main(void) {
int offset = -3;
char line[40];
int id = 0;
int value = 0;
snprintf(line, sizeof(line), "id=%d value=%d", 7, 20 + offset);
int fields = sscanf(line, "id=%d value=%d", &id, &value);
printf("fields=%d id=%d value=%d\n", fields, id, value);
return 0;
}
#include <stdio.h>
int main(void) {
int offset = 5;
char line[40];
int id = 0;
int value = 0;
snprintf(line, sizeof(line), "id=%d value=%d", 7, 20 + offset);
int fields = sscanf(line, "id=%d value=%d", &id, &value);
printf("fields=%d id=%d value=%d\n", fields, id, value);
return 0;
}
offset ← 0, line ← S�rpz, id ← 0, value ← 0, fields ← 2
3int main(void) {4 int offset→ 0 = 0; //@offset=5, -35 char line→ S�rpz[40];6 int id→ 0 = 0;7 int value→ 0 = 0;89 snprintf(line→ id=7 value=20, sizeof(line), "id=%d value=%d", 7, 20 + offset0);10 int fields→ 2 = sscanf(lineid=7 value=20, "id=%d value=%d", &id→ 7, &value→ 20);1112 printf("fields=%d id=%d value=%d\n", fields2, id7, value20);13 return 0;14}outputfields=2 id=7 value=20
offset ← -3, line ← p�k1�s, id ← 0, value ← 0, fields ← 2
3int main(void) {4 int offset→ -3 = -3;5 char line→ p�k1�s[40];6 int id→ 0 = 0;7 int value→ 0 = 0;89 snprintf(line→ id=7 value=17, sizeof(line), "id=%d value=%d", 7, 20 + offset-3);10 int fields→ 2 = sscanf(lineid=7 value=17, "id=%d value=%d", &id→ 7, &value→ 17);1112 printf("fields=%d id=%d value=%d\n", fields2, id7, value17);13 return 0;14}outputfields=2 id=7 value=17
offset ← 5, line ← p���v, id ← 0, value ← 0, fields ← 2
3int main(void) {4 int offset→ 5 = 5;5 char line→ p���v[40];6 int id→ 0 = 0;7 int value→ 0 = 0;89 snprintf(line→ id=7 value=25, sizeof(line), "id=%d value=%d", 7, 20 + offset5);10 int fields→ 2 = sscanf(lineid=7 value=25, "id=%d value=%d", &id→ 7, &value→ 25);1112 printf("fields=%d id=%d value=%d\n", fields2, id7, value25);13 return 0;14}outputfields=2 id=7 value=25