How to avoid pointer arithmetic when using char** argv

From clang-tidy – cppcoreguidelines-pro-bounds-pointer-arithmetic:

Pointers should only refer to single objects, and pointer arithmetic is fragile and easy to get wrong. span<T> is a bounds-checked, safe type for accessing arrays of data.

So yes:

Is there an alternative way to use the values of argv without using pointer arithmetic? Isn’t accessing a char** by any sensible method going to have to use pointer arithmetic?

You’re entirely correct. However, the guideline is about hiding that pointer arithmetic, letting a helper class do bounds checks before performing the arithmetic. You can construct a span<char*> from argv and argc. E.g. in C++20 you would write:

auto args = std::span(argv, size_t(argc));

and then use args instead of argv.

Leave a Comment