使用char ** argv时如何避免指针运算

时间:2017-08-16 16:08:25

标签: c++ command-line-arguments clang++ pointer-arithmetic clang-static-analyzer

尝试打印第一个命令行参数时:

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

clang-tidy发出警告:

  

警告:'不要使用指针算术'       来自[cppcoreguidelines-pro-bounds-pointer-arithmetic]

是否有另一种方法可以在不使用指针算法的情况下使用argv的值?是不是通过任何合理的方法访问char**必须使用指针算法?

我很欣赏有一些专门的函数来处理命令行参数,但它们似乎太重了,只需打印一个参数。

我在c++写作,使用clang编译器并使用cmake构建。

1 个答案:

答案 0 :(得分:8)

来自clang-tidy - cppcoreguidelines-pro-bounds-pointer-arithmetic

  

指针应该只引用单个对象,指针算法很脆弱且容易出错。 span<T>是一种用于访问数据数组的边界检查的安全类型。

是的:

  

是否有另一种方法可以在不使用指针算法的情况下使用argv的值?是不是通过任何合理的方法访问char **必须使用指针算法?

你完全正确。但是,指南是关于隐藏指针算法,让助手类在执行算术之前进行边界检查。您可以从span<char*>argv构建argc