c++ - 缓冲区溢出 :codesonar warning

标签 c++

int main(int argc, char *argv[])
{
    std::string first_arg = argv[1];
    std:: string sec_arg = argv[2];
}

缓冲区溢出帮助 此代码读取超过 argv 指向的缓冲区的末尾。 读取的第一个字节位于从 argv 指向的缓冲区开始处的偏移量 8 处。 偏移量超过容量。 argv 指向的缓冲区的容量,以字节为单位,等于 8。

最佳答案

CodeSonar 警告可能会出现缓冲区溢出,因为您的程序可以使用 <2 个参数调用。如果您在访问 argv 之前检查 argc>2,则此警告将消失:

#include <string>

int main(int argc, char *argv[])
{

    if (argc>2)
    {
            std::string first_arg = argv[1];
            std::string sec_arg = argv[2];
    }
    return 0;
}

关于c++ - 缓冲区溢出 :codesonar warning,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48662183/

相关文章:

C++11;非静态数据成员初始化可以访问其他数据成员吗?

c++ - 为什么我们不能在内存限制内声明一个任意大小的数组,比如 int 数据类型?

c++ - 'int right' 编程图形 C++

c++ - C/C++ : maximum size of errno-associated strings (at compile-time)

c++ - 如何根据偏移量从文件中删除数据?

c++ - 使用多点触控平移 - 缩放 - 轨道 - Unreal Engine -

c++ - 如何检测通用 lambda 在 C++ 14 中是否不可编译?

c++ - unique_ptr 无法删除 SDL_Window,因为它是一个不完整的类型(VC++ Express 2013)

c++ - 是否定义为 C++ 标准算法提供倒置范围?

c++ - 使用带有 pure_out_value 策略的 std::string& Reference 的 Luabind 函数不可能吗?