#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include "sjet_config.h"
int main(int argc, char *argv[])
{
char *file_name = "./sjet_config.d";
FILE *config_file;
char line[MAXLINE]; /* a place for a line from config file */
char parms[2][MAXLINE];
unsigned long int address;
unsigned char data;
int result1, result2, result3;
if (argc > 1)
{
file_name = argv[1];
}
config_file = fopen(file_name, "r");
if (config_file == NULL)
{
printf("Input file %s is missing! \n", file_name);
return EXIT_FAILURE;
}
else
{
while(!feof(config_file))
{
fgets( line, MAXLINE, config_file );
printf("%s",line);
if((*line) !='\n')
{
result1 = sscanf(line, " %s %s", &(parms[0][0]), &(parms[1][0]));
printf("parms0: %s\n", parms[0] );
printf("parms1: %s\n", parms[1]);
printf("result: %d\n", result1);
result2 = sscanf(parms[0], "%i", &address);
result3 = sscanf(parms[1], "%i", &data);
printf("Address: 0x%x, Data: 0x%x \t %d \t %d \n\n",address, data, result2, result3 );
}
}
fclose( config_file );
}
return EXIT_SUCCESS;
}
Ulazni fajl sjet_config.d izgleda ovako:
0x31 0x32
0x33 0x34
0x35 0x36
0x37 0x38
0x39 0x3a
a ispis ovako:
[salec@salec src]$ ./sjet_config
0x31 0x32
parms0: 0x31
parms1: 0x32
result: 2
Address: 0x0, Data: 0x32 1 1
0x33 0x34
parms0: 0x33
parms1: 0x34
result: 2
Address: 0x0, Data: 0x34 1 1
0x35 0x36
parms0: 0x35
parms1: 0x36
result: 2
Address: 0x0, Data: 0x36 1 1
0x37 0x38
parms0: 0x37
parms1: 0x38
result: 2
Address: 0x0, Data: 0x38 1 1
0x39 0x3a
parms0: 0x39
parms1: 0x3a
result: 2
Address: 0x0, Data: 0x3a 1 1
Koliko ja ovo razumem, linija iz fajla je procitana kako valja sa fgets, sscanf je prvi put lepo rasclanio na dva stringa (i uredno javio da je nasao dva podatka), koji su tacno ucitani u parms[0] i parms[1], ali onda sledeci put iz parms[0] uredno procita podatak (vrati 1) ali ga ili ne dodeli ili ga na neku cudnu foru pretvori u 0, dok nad parms[1] sve prodje OK.
Pa, nije mi jasno otkud ta razlika u tretmanu?