jdoe jdoe - 15 days ago 10
C Question

sscanf for formatting string from file

As part of a homework assignment I need to load a file with data in the following format:

R1 Fre 17/07/2015 18.00 FCN - SDR 0 - 2 3.211
R1 Lor 18/07/2015 16.00 FCM - VFF 2 - 0 7.232


For doing so I used fgets to store the string in a temporary string and after that sscanf to format the string while iterating through the file line by line.

while(fgets(temp, MAX_LINE_SIZE, input_file)!= NULL) {
sscanf(temp,
" %*s %3s %d / %d / %d %s %3s - %3s %d - %d %6s",

round[i].match[j].weekday,
&round[i].match[j].day,
..... And so on ....
j++;
}


Current output is:

Weekday: Fre18.00FCNSDR3.211
Day: 17
Month: 7
Year: 2015
Start: 18.00FCNSDR3.211
Home team: FCNSDR3.211
Away team: SDR3.211
Score: 0 - 2
Viewers: 3.211


Expected output is:

Weekday: Fre
Day: 17
Month: 7
Year: 2015
Start: 18.00
Home team: FCN
Away team: SDR
Score: 0 - 2
Viewers: 3.211


The strings with %s placeholder in sscanf seems to putting themselves together for some reason.

All help is much appreciated.

Answer

Are you sure you're storing strings like Fre in a 4-byte character array?

%3s actually reads in 4 bytes. F, r, e, and \0. If you use an array too small then you overwrite the \0, causing the string to include whatever comes next in memory (in this case, more strings).