Vincent Lefevre
2024-07-03 14:31:27 UTC
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';
vp p = &a, q = &b;
printf ("%p\n", (void *) p);
printf ("%p\n", (void *) q);
if (p + 1 == q)
{
a = 'x';
printf ("%zd\n", strlen (p));
}
if (q + 1 == p)
{
b = 'x';
printf ("%zd\n", strlen (q));
}
return 0;
}
If such a program is valid, would there be issues by working with
pointers on such a string, say, dereferencing p[1] in the first "if"
(which is normally UB)?
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';
vp p = &a, q = &b;
printf ("%p\n", (void *) p);
printf ("%p\n", (void *) q);
if (p + 1 == q)
{
a = 'x';
printf ("%zd\n", strlen (p));
}
if (q + 1 == p)
{
b = 'x';
printf ("%zd\n", strlen (q));
}
return 0;
}
If such a program is valid, would there be issues by working with
pointers on such a string, say, dereferencing p[1] in the first "if"
(which is normally UB)?
--
Vincent Lefèvre <***@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)
Vincent Lefèvre <***@vinc17.net> - Web: <https://www.vinc17.net/>
100% accessible validated (X)HTML - Blog: <https://www.vinc17.net/blog/>
Work: CR INRIA - computer arithmetic / AriC project (LIP, ENS-Lyon)