fscanf problem

Pavel Kankovsky peak na argo.troja.mff.cuni.cz
Středa Květen 31 11:15:51 CEST 2000


On Wed, 31 May 2000, Juraj Hilovsky wrote:

> Zaujimava je nasledujuca vec:
> zapis fscanf(stream,"%[^\n]%*c",buffer); v linuxe nacita sice ten prazdny
> riadok, ale zostane na nom a cita ho az do zblbnutia (ak je v cykle).
> V systeme MS-DOS tato funkcia pracuje korektne. To znamena, ze ked je v
> riadku iba '\n', nacita prazdny retazec a pokracuje dalej.

Ne, je to presne naopak. V tom DOSu (coz asi znamena prelozeno urcitym
konkretnim DOSovym kompilatorem a slinkovano s konkretnimi knohovnami) je
to spatne a v Linuxu je to dobre, protoze:

       [      Matches a **nonempty** sequence of characters from the
              specified  set  of  accepted  characters;  the next
              ...

cili vzorkem ``%[^\n]%*c'' nelze nacist ``\n'' a funkce fscanf v takovem
pripade vrati 0 a precteny (ale nevyhovujici) znak (tj. '\n') vrati pomoci
ungetc() na vstup.

--Pavel Kankovsky aka Peak  [ Boycott Microsoft--http://www.vcnet.com/bms ]
"Resistance is futile. Open your source code and prepare for assimilation."



Další informace o konferenci Linux