Re: May a string span multiple, independent objects?

Liste des Groupes 
Sujet : Re: May a string span multiple, independent objects?
De : ben (at) *nospam* bsb.me.uk (Ben Bacarisse)
Groupes : comp.std.c
Date : 03. Jul 2024, 22:08:39
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <87zfqy6v54.fsf@bsb.me.uk>
References : 1 2
User-Agent : Gnus/5.13 (Gnus v5.13)
James Kuyper <jameskuyper@alumni.caltech.edu> writes:

On 7/3/24 10:31, Vincent Lefevre wrote:
ISO C17 (and C23 draft) 7.1.1 defines a string as follows: "A string
is a contiguous sequence of characters terminated by and including
the first null character."
>
But may a string span multiple, independent objects that happens
to be contiguous in memory?
...
For instance, is the following program valid and what does the ISO C
standard say about that?
>
#include <stdio.h>
#include <string.h>
>
typedef char *volatile vp;
>
int main (void)
{
char a = '\0', b = '\0';
>
a and b are not guaranteed to be contiguous.
>
vp p = &a, q = &b;
>
printf ("%p\n", (void *) p);
printf ("%p\n", (void *) q);
if (p + 1 == q)
{
>
That comparison is legal, and has well-defined behavior. It will be true
only if they are in fact contiguous.
>
a = 'x';
printf ("%zd\n", strlen (p));
>
Because strlen() must take a pointer to 'a' (which is treated, for these
purposes, as a array of char of length 1), and increment it one past the
end of that array, and then dereference that pointer to check whether it
points as a null character, the behavior is undefined.

I think this is slightly misleading.  It suggests that the UB comes from
something strlen /must/ do, but strlen must be thought of as a black
box.  We can't base anyhting on a assumed implementation.

But our conclusion is correct because there is explicit wording covering
this case.  The section on "String function conventions" (7.24.1)
states:

  "If an array is accessed beyond the end of an object, the behavior is
  undefined."

--
Ben.

Date Sujet#  Auteur
3 Jul 24 * May a string span multiple, independent objects?13Vincent Lefevre
3 Jul 24 +* Re: May a string span multiple, independent objects?4Hans-Bernhard Bröker
3 Jul 24 i+- Re: May a string span multiple, independent objects?1Vincent Lefevre
3 Jul 24 i+- Re: May a string span multiple, independent objects?1James Kuyper
8 Aug 24 i`- Re: May a string span multiple, independent objects?1Tim Rentsch
3 Jul 24 +* Re: May a string span multiple, independent objects?7James Kuyper
3 Jul 24 i`* Re: May a string span multiple, independent objects?6Ben Bacarisse
3 Jul 24 i +- Re: May a string span multiple, independent objects?1James Kuyper
4 Jul 24 i `* Re: May a string span multiple, independent objects?4Vincent Lefevre
5 Jul 24 i  +- Re: May a string span multiple, independent objects?1Ben Bacarisse
5 Jul 24 i  +- Re: May a string span multiple, independent objects?1James Kuyper
8 Aug 24 i  `- Re: May a string span multiple, independent objects?1Tim Rentsch
5 Jul 24 `- Re: May a string span multiple, independent objects?1Kaz Kylheku

Haut de la page

Les messages affichés proviennent d'usenet.

NewsPortal