Ik ben bezig wat input te parsen (config files), en gebruik daarvoor nu sscanf.
Er zijn 2 soorten regels:
- [section]
- option = value
Ik haal de regels op met fgets, dat gaat goed. De tweede soort regel parsen gaan ook goed:
Als ik nml bv daarna de volgende code uitvoer, dan komt daar uit "Section: Thumbs], line: [Thumbs]"
Alle "strings" zijn gedeclareerd als char arrays van size 1024; fgets gebruikt deze 1024 ook om het op te halen.
Wat doe ik fout??
Er zijn 2 soorten regels:
- [section]
- option = value
Ik haal de regels op met fgets, dat gaat goed. De tweede soort regel parsen gaan ook goed:
C:
option en value worden precies wat ze moeten worden. Alleen de eerste soort regel doet het niet goed:1
| if (sscanf(line, "%s = %s\n", option, value) == EOF) { /* error */ } |
C:
Het probleem is hierbij, dat als line bv [Thumbs] is, dan wordt section niet Thumbs maar Thumbs], dus inclusief laatste ] !1
2
3
| len = strlen(line); if (len < 4 || line[len-2] != ']') { /* error */ } if (sscanf(line, "[%s]\n", section) == EOF) { /* error */ } |
Als ik nml bv daarna de volgende code uitvoer, dan komt daar uit "Section: Thumbs], line: [Thumbs]"
C:
1
| printf("Section: %s, line: %s", section, line); |
Alle "strings" zijn gedeclareerd als char arrays van size 1024; fgets gebruikt deze 1024 ook om het op te halen.
Wat doe ik fout??
More than meets the eye
There is no I in TEAM... but there is ME
system specs