Sujet : Re: is it possible to point to a slice of an array without malloc or VLAs?
De : phil.eternal (at) *nospam* ashbysoft.com (Phil Ashby)
Groupes : comp.lang.cDate : 28. Aug 2024, 09:13:39
Autres entêtes
Organisation : A noiseless patient Spider
Message-ID : <vamm7j$3d74u$1@dont-email.me>
References : 1
User-Agent : Mozilla Thunderbird
On 28/08/2024 08:06, Mark Summerfield wrote:
I'm using getopt_long() to process a command line. So after a typical
call I might have:
argv == {"./efind", "-D", "-x", "one", "two", "three", "four"} optind
== 3
What I'd like to do (without copying or mallocing and without using a
VLA) is to get a pointer to a slice of argv, specifically, {"one",
"two", "three", "four"}. In Python terms argv[optind:argc].
Is this possible in C?
To answer the specific question, I would use pointer arithmetic,
provided there is no intention to modify values, ie:
char **slice = argv + config->optind;
thus slice now points at the appropriate part of argv and can be indexed
or dereferenced / incremented to access elements.
At the moment I store argv, optind, and argc and handle the slice
> using a loop:
if (config->optind < config->argc) for (int i = config->optind; i <
config.argc; ++i) process(config->argv[i]);
This works fine, so really I'm just wondering if there's a nicer
way.
I don't think so, other than to drop the outer check as the loop
condition provides the same boundary.
Phil.