问题
I am able to read an entire string in a line using fgets()
but fscanf()
is not doing so.
According to PHP manual
fscanf — Parses input from a file according to a format
The function
fscanf()
is similar tosscanf()
, but it takes its input from a file associated with handle and interprets the input according to the specified format, which is described in the documentation forsprintf()
.fgets — Gets line from file pointer
Gets a line from file pointer.
Since fscanf()
supports formats as mentioned above I can use %s
to read an entire line but instead it reads only one word.
回答1:
The PHP documentation of fscanf()
and sscanf()
is not complete. The formats are similar to the ones used by printf()
, but they're not exactly the same. When you're printing, %s
will print any string, but when you're scanning it just reads a word. To get more complete information, you need to read the documentation of the C
fscanf()
function. Some of this information is also in the comments section of the documentation web page.
To read a whole line with fscanf()
, use "%[^\\n]"
. In fscanf()
, $[^characters]
means to match any sequence of characters that isn't in the set between the brackes (it's similar to [^characters]*
in a regular expression). So this matches any sequence of characters other than newline. See http://php.net/manual/en/function.sscanf.php#56076
来源:https://stackoverflow.com/questions/37742699/php-fscanf-vs-fgets