Am 19.09.2025 um 10:38 schrieb Riccardo (Jack) Lucchetti:
On 19/09/2025 10:07, Sven Schreiber wrote:
>
> <hansl>
>
> string hey = "aha oho, uhu"
> string s
> sscanf(hey, "aha %s", s) # expected: "oho, uhu"
> print s # gives "oho,"
>
> </hansl>
This function is really borrowed from the standard C library. From its
man page:
s Matches a sequence of non-white-space characters; the next
pointer must be a pointer to the initial element of a character
array that is long enough to hold the input sequence and the ter‐
minating null byte ('\0'), which is added automatically. The in‐
put string stops at white space or at the maximum field width,
whichever occurs first.
so the space effectively end the string that the function catches. I
guess (haven't tested) that in C you could use "%[a-z, ]" do do what
you want, but it appears we have a bug that prevents this from working
properly in hansl.
About the whitespace: OK, good to know where it comes from, but the
question is whether we want to have this behavior at the hansl level.
AFAIK, in hansl the format code %s stands for an arbitrary string,
including whitespace. At least it doesn't seem to be documented.
About %[a-z, ]: Not sure that this part would really be a bug, since the
documentation says you need to specify the number of chars N as well.
Plus, it talks about treating the hyphen differently. Indeed, using
"%[abcdedfghijklmnopqrstuvwxyz, ]" worked for me in this case (although
it's a bit clumsy).
(Side remark: I could work around this whole problem by using strsub()
instead, but that's not the point here.)
thanks
sven