我不知何故parsingC + +中的Windows命令行参数的问题。 我试着用这个
int main(int argc,char **argv) { std::cout << "Command-line argument count: " << argc << " n"; std::cout << "Arguments:n"; for (int i = 0; i < argc; i++) std::cout << " argv[" << i << "] " << argv[i] << "n"; return 0; }
以及这个
int main(int argc,char *argv[]) { std::cout << "Command-line argument count: " << argc << " n"; std::cout << "Arguments:n"; for (int i = 0; i < argc; i++) std::cout << " argv[" << i << "] " << argv[i] << "n"; return 0; }
variablesargc和argv似乎在某种程度上是未初始化的。 这就是启动程序返回给我:
Z:DevProcessSuspenderDebug>ProcessSuspender a Command-line argument count: 2130558976 Arguments: argv[0] argv[1] ╠ÉÉÉÉÉj↑h╚♂YwÞØ÷■ âe³ argv[2]
(崩溃后)
有没有办法使用WScript.Shell启动一个VBScript最小化的程序?
跟踪在VB.net应用程序中调用的外部.EXE的参数
Xargs并行在Bash中
如何在命令行上将双引号转义为.vbs脚本?
在通过Windows上下文菜单执行时,文件path中的空格会导致出现多个应用程序实例
我使用/SUBSYstem:CONSOLE链接器选项使用MSVC12编译它。 这个问题的原因是什么?
处理命令行参数?
为另一个分区/目录运行apt-get?
具有多个参数的xargs
在Windows上直接运行python文件时,命令行参数被删除
使用Python的sys.argv将函数结果返回给命令行?
我已经手动设置入口点main 。 无论是否使用默认项目设置( _tmain ),问题依然存在。
一般来说,除非你知道后果,否则你不应该那样做。 入口点( /ENTRY )的典型值应该是:
[w]mainCRTStartup ,它调用[w]main ,或者
[w]WinMainCRTStartup ,它调用[w]WinMain ,或
_DllMainCRTStartup ,它调用DllMain 。
为什么这需要? 那么, …CRTStartup – 函数的家庭做一些关键的事情 ,包括初始化:
C运行时(CRT),
任何全局变量,和
参数argc和argv ,就像你意外发现的那样。
所以对于一个典型的程序,你可能希望它能够完成它的工作。 在Linux世界中,有一个称为_start的等价函数,也需要执行相同的初始化任务,可以在链接时使用-e覆盖。
这里的混淆可能是由于“切入点”这个词的含义不同而产生的:从语言的角度来看,“明显的切入点”的含义是“ main的”,也就是“真”从语言实现的角度(这是…CRTStartup或_start )的角度来看“入口点”。
请注意,使用…CRTStartup函数并不是绝对必要的 ,因为您当然可以编写一个避免使用它们的程序。 它确实带来了成本,但是:
你不能使用C运行时,所以你不能使用大部分的标准库,
你需要手动初始化任何全局变量,
您需要使用Windows API( GetCommandLineW和CommandLinetoArgvW )手动获取argc和argv 。
有些人这样做是为了避免依赖于CRT,或者最小化可执行文件的大小。
我在VS 2012上试了一下你的项目,工作进展顺利。 我添加了一个getchar(); 命令如下:
#include <iostream> int main(int argc,char *argv[]) { std::cout << "Command-line argument count: " << argc << " n"; std::cout << "Arguments:n"; for (int i = 0; i < argc; i++) std::cout << " argv[" << i << "] " << argv[i] << "n"; getchar(); return 0; }
所以我可以看到输出。
右键点击Project – > Properties – > debugging – > Command Arguments。
这在我的项目中是空的,我添加了角色a来模拟你的问题。
这是我得到的输出:
右键点击项目 – > Debug – > Start new Instance – >你想建立它 – >是的
输出:
Command-line argument count: 2 Arguments: argv[0] <my macines path>helpingStack1.exe argv[1] a
请再次检查。 我希望这有帮助。
1)我怀疑当你运行这个脚本的时候,你的二进制文件不是最新的,所以请做一个干净的构建,并确认你确实运行的是与你正在构建的exe相同的exe文件。 请检查配置 – 调试/发布。
2)转到创建项目的文件夹,然后单击项目文件夹,然后更改属性 – >确保在复选框中未选中只读。
很显然,IDE或项目有什么问题,或者只有系统上的其他设置。 代码是完美的。
你有没有尝试直接和独立运行你的输出EXE,通过命令提示符执行?
用命令提示符运行你的exe文件,提供一些任意的参数,然后检查输出。
它值得在项目属性 – >常规中检查你的字符集。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。