user7119460 user7119460 - 1 year ago 103
C++ Question

How to avoid pointer arithmetic when using char** argv

When trying to print the first command line argument:

std::cout << argv[0] << std::endl;


clang-tidy gives the warning:


warning: 'do not use pointer arithmetic'
from [cppcoreguidelines-pro-bounds-pointer-arithmetic]


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?

I appreciate there are some specialised functions to handle command line arguments, but they seem too heavyweight for simply printing one argument.

I am writing in
c++
, using the
clang
compiler and building with
cmake
.

hvd hvd
Answer Source

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.

Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download