我可以为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,而是尝试将您想要的参数放在那里,看看它是否不会像它所说的那样将这些参数传递给您的程序。