Deutsch   English   Français   Italiano  
<875xrofg4c.fsf@nosuchdomain.example.com>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: Keith Thompson <Keith.S.Thompson+u@gmail.com>
Newsgroups: comp.lang.c
Subject: Re: No warning at implicit removal of const. Was: relearning C: why does an in-place change to a char* segfault?
Date: Sun, 25 Aug 2024 14:26:59 -0700
Organization: None to speak of
Lines: 35
Message-ID: <875xrofg4c.fsf@nosuchdomain.example.com>
References: <IoGcndcJ1Zm83zb7nZ2dnZfqnPWdnZ2d@brightview.co.uk>
	<20240801174026.00002cda@yahoo.com> <v8gi7i$29iu1$1@dont-email.me>
	<slrnvaorkl.34j6.candycanearter07@candydeb.host.invalid>
	<87zfpvfdk4.fsf@nosuchdomain.example.com>
	<v8ii17$2q5p1$1@dont-email.me>
	<ka6ncjp0ca2dvf6v6lbg6faindvgmujtoa@4ax.com>
MIME-Version: 1.0
Content-Type: text/plain
Injection-Date: Sun, 25 Aug 2024 23:27:00 +0200 (CEST)
Injection-Info: dont-email.me; posting-host="40ee2afb4f283fffad3dfce85eeabfde";
	logging-data="2207701"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/klCrD9JXGEb1FuofcBAP0"
User-Agent: Gnus/5.13 (Gnus v5.13)
Cancel-Lock: sha1:Zuwctdz+V0UXtxQytokzMzRDgCY=
	sha1:+MjvkBn8M7fhHKffLQjcHb6tZoM=
Bytes: 2484

dave_thompson_2@comcast.net writes:
> On Fri, 2 Aug 2024 13:04:55 +0100, Richard Harnden
> <richard.nospam@gmail.invalid> wrote:
>
> [string literals not typed const in C even though writing prohibited]
>
>> Is there any reason not to always write ...
>> 
>> static const char *s = "hello, world";
>> 
>> ... ?
>> 
>> You get all the warnings for free that way.
>
> But sizeof s is 8 or 4 regardless of the string, while sizeof "some
> string" is the length of the string plus 1 (for the null terminator).
>
> static const char s[] = "hello, world"; 
> // autosized by initializer
>
> would be a better replacement, or in C99+ if at file scope
>
> (const char[]){"hello, world"}

Most uses of that string are very likely to be via function arguments.

If it's defined at file scope, defining s as an array rather than as a
pointer can be useful for any code that refers to it directly (and needs
its size), but as soon as you pass it to a function you lose the size
information (and probably need to pass an extra argument for the
length).

-- 
Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com
void Void(void) { Void(); } /* The recursive call of the void */