我可以为argv赋值吗?

当我使用 vscode 进行 c 和 c++ 调试时,有时需要一些命令行参数(./runFile args1 args2)。如果我直接点击运行,它会显示argv[2]超出范围。这是因为我没有输入参数。但是如果我通过命令行输入参数,似乎无法单步通过vscode。我想到的方法是我argv[]=value在main函数的开头在这里给命令行参数赋值。这样使用会不会有问题?而我只能argv[0]=value argv[1]=value。有没有办法直接给 argv 赋值argv=...?我试过argv[1]=value argv[2]=value。可以正常运行。这里有什么风险吗?比如给argv分配了多少内存?

回答

我可以为 argv 赋值吗?

是的。

另一个问题是你是否应该。我不推荐它。

比如给argv分配了多少内存?

保证argc + 1指向的数组中有多个指针argv。最后一个是空指针。不能保证会分配更多内存。


PS我没有使用过vscode,但我怀疑它有一种在其中运行调试器时指定命令行参数的方法。无论如何,大多数IDE都可以。如果没有,那么也许您可以使用命令行调试器。


回答

当 vscode 运行你的程序时,它会使用命名文件中的参数launch.json来执行它。

如果您必须:Run-> Open Configurations,则会打开该launch.json项目的 。默认情况下,它看起来像这样:

{
    // Use IntelliSense to learn about possible attributes.
    // Hover to view descriptions of existing attributes.
    // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
    "version": "0.2.0",
    "configurations": [
        {
            "name": "(gdb) Launch",
            "type": "cppdbg",
            "request": "launch",
            "program": "enter program name, for example ${workspaceFolder}/a.out",
            "args": [],
            "stopAtEntry": false,
            "cwd": "${workspaceFolder}",
            "environment": [],
            "externalConsole": false,
            "MIMode": "gdb",
            "setupCommands": [
                {
                    "description": "Enable pretty-printing for gdb",
                    "text": "-enable-pretty-printing",
                    "ignoreFailures": true
                }
            ]
        }
    ]
}

如果您将鼠标悬停在 上args,它会告诉您:“传递给程序的命令行参数。”

我不会在程序启动后尝试修改 argv,而是尝试将您想要的参数放在那里,看看它是否不会像它所说的那样将这些参数传递给您的程序。


以上是我可以为argv赋值吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>