微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Windows上的C ++命令行参数问题

我不知何故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] 举报,一经查实,本站将立刻删除。

相关推荐