首页 > 解决方案 > C++:从命令行传递参数时,为什么会出现“抛出异常:读取访问冲突。argv 为 0xFEFEFEFE”?

问题描述

我试图通过从命令行传递数字和操作来运行一个简单的计算器程序,例如“25.2 + 4.87”。使用默认值时它工作正常,但是一旦我传入参数,它就会抛出以下消息:“抛出异常:读取访问冲突。argv 是 0xFEFEFEFE”

这是代码:

//Valores por default
    char num1[] = "0.5";
    char num2[] = "10.25";
    char operacion = '/';
    if (argv[1] && argc ==4) { 
        std::cout << argv[1] << std::endl;
        std::cout << argv[2] << std::endl;
        std::cout << argv[3] << std::endl;
        strcpy_s(num1, 100, argv[1]);
        strcpy_s(num2, 100, argv[3]);
        operacion=*argv[2];
        
    }

它可以很好地打印出参数,但是在运行程序后,它会在执行第二个 strcpy_s 后抛出我之前提到的错误:

strcpy_s(num2, 100, argv[3]);

第一个 strcpy_s 工作正常,并且 num1 被分配了我在参数中传递的第一个数字,但之后我做的任何其他事情都会引发错误。

在逐行调试时,我注意到变量“argv”具有我的可执行文件的正确路径,但在执行第一个 strcpy_s 后,内容从正确的文件路径更改为 0xfefefefe

我一直在寻找这个错误,但他们都有一个 nullptr 错误,我找不到任何关于此的信息。非常感谢您的帮助,谢谢。

标签: c++exceptionargs

解决方案


推荐阅读