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

offset
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;
}
  1. 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
  1. 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
  1. 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