On Mon, Aug 18, 2025 at 07:23:38PM +0200, Otto Moerbeek wrote:
> On Mon, Aug 18, 2025 at 06:40:04PM +0200, Walter Alejandro Iglesias wrote:
>
> > Question for the experts. Let's take the following example:
> >
> > ----->8------------->8--------------------
> > #include <stdio.h>
> > #include <string.h>
> > #include <wchar.h>
> >
> > #define period 0x2e
> > #define question 0x3f
> > #define exclam 0x21
> > #define ellipsis L'\u2026'
> >
> > const wchar_t p[] = { period, question, exclam, ellipsis };
>
> This is not a string, as is is not NUL terminated, so there's garbage
> after it, which will be picked up by wcsspn() until it hits a NUL.
If you look at the asm output from the compiler using -S:
$ cc -S prog.c
$ view prog.s
... you'll likely see that what follows the const definition of p[] in memory
is actually s[], so you're basically feeding both p[] and s[] as the charset
argument to wcsspan().