c++ system()和WinExec()的区别[通俗易懂]

c++ system()和WinExec()的区别[通俗易懂]区别1.system是c库的函数WinExec是windows函数区别2.system有一个参数,是命令行Winexec有两个参数,一个是命令行,一个是窗口显示区别3.虽然两个都是命令行,但有很大的区别Winexec的命令行参数一般是一个外部程序的路径加给这个程序的参数,如Winexec("D:\\notepad.exe1.txt",WM_SHOWWINDOW);system的命令行参数其实是给…

大家好,又见面了,我是你们的朋友全栈君。

区别1.

system是c库的函数

WinExec是windows函数


区别2.

system有一个参数,是命令行

Winexec有两个参数,一个是命令行,一个是窗口显示


区别3.

虽然两个都是命令行,但有很大的区别

Winexec的命令行参数一般是一个外部程序的路径加给这个程序的参数,如

Winexec(”D:\\notepad.exe 1.txt”,WM_SHOWWINDOW);

system的命令行参数其实是给cmd程序的参数,system执行的时候是调用cmd程序,

假设system(“D:\\notepad.exe 1.txt“);程序运行时是调用cmd -c D:\notepad.exe 1.txt;

系统就会启动cmd程序,由它执行。所以system的参数就是cmd -c后所对应的参数

(cmd -c 后面应该接什么可以通过cmd /?查看),因此system可以使用”cd E:\”这样的参数,cmd会认识它,

但winexec就不认识。因为没有cd这个程序存在,其实cd只不过是cmd自定义的一个命令。


有时候用winexec和system调用同样的程序,会有不同的结果,

例:
winexec("\"D:\\program files\\notaped.exe\" \"D:\\my document\\1.txt\"",WM_SHOWWINDOW);   
 
system("\"D:\\program files\\notaped.exe\" \"D:\\my document\\1.txt\"",);   

看起来两个一样,但运行不一样

winexec可以正常运行,但system会报错,说找不到路径什么的或参数错误。

为什么呢?因为system的参数给cmd,cmd会用自己的方法解析参数(cmd帮助里有说明),

cmd 当碰到一对双引号时,它会把双引号里面的东西提取出来,当有多对双引号时,

它就会用其他方法来解析(老实说我也没看懂它的帮助里关于多对双引号解析的逻辑,如果你看懂了,麻烦告诉我一声)。

那么怎么解决上面的问题呢,很简单,在所有参数外面再包一对双引号

system("\"\"D:\\program files\\notaped.exe\" \"D:\\my document\\1.txt\"\"",);   

这样cmd只会去除首尾的双引号,不做其他解析


区别4.

winExec是不同步的进程调用,就是调用起来了就返回了,不会等调用起来的程序结束

system是同步调用进程,调用进程不结束,它就不返回,它可以获取调用进程所返回的值

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157581.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • python 遍历文件夹下所有图片

    python 遍历文件夹下所有图片水电费

    2022年5月20日
  • C语言system的用法「建议收藏」

    C语言system的用法「建议收藏」C语言system的用法system()在头文件stdlib.h中system()是C语言中为了调用windows系统命令来设置。例:system(“cls”);//清屏system(“pause”);//暂停system(“title名字”);//设置窗口名system(“time/T”);//显示当前时间system(“data/T”);//显示当前日期system(“…

    2022年9月18日
  • spring boot 过滤器_拦截器和过滤器的区别面试

    spring boot 过滤器_拦截器和过滤器的区别面试原文地址:https://www.tsanyang.top/share-detail/739784336139616256.html最近实现一个权限控制功能,想通过拦截器进行实现,当业务一切按预期一样完成,有一个特别控制需要再拦截器对参数进行解析使用,但是发现当我们再拦截器读取了输入流,再控制器是无法获取到参数的,这个是由于输入流只能被读取一次,然后通过问题搜索了一把,看见网上通过重写HttpServletRequestWrapper实现输入流读取后,再写入回去,这样解决控制器无法获取参数问题,故在此做记

    2022年8月23日
  • Ubuntu 安装 gcc-4.9.3-64-gnu

    Ubuntu 安装 gcc-4.9.3-64-gnu可能每个人的环境不一样,所以安装的方法有些许差别。我参考了多个网络上的教程,在自己的ubuntu虚拟机中安装了gcc-4.9.3-64-gnu,记录一下自己的安装过程。虚拟机中默认安装了gcc-5.4.0,我要安装gcc-4.9.3一、下载地址:wgethttp://ftp.tsukuba.wide.ad.jp/software/gcc/releases/gcc-4.9.3/gcc-4.9.3.tar.bz2由于是用的虚拟机,配置不是很高,自己是windows下载完毕拷贝进虚拟机中。gcc-gn

    2022年7月24日
  • xshell安装步骤_Xshell怎么使用

    xshell安装步骤_Xshell怎么使用XShell可以在Windows界面下来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。它支持RLOGIN、SFTP、SERIAL、TELNET、SSH2和SSH1,可以非常方便的对Linux主机进行远程管理。除此之外,其还有丰富的外观配色方案以及样式选择。Xshell免费版官网下载地址https//www.xshell.com/zh/free-for-home-school/链接https//pan.baidu.com/s/1NJGWZHkByakOkQpKfkc7Yg。…

    2022年9月4日
  • winform与cefsharp混合开发_历史必修二笔记手写

    winform与cefsharp混合开发_历史必修二笔记手写在上一篇博文《WinForm内置浏览器之CefSharp笔记一》,简单介绍了CefSharp的快速入门。这篇博文接着上篇,主要记录C#如果调用JS中的方法。参照Github示例:传送门加载自定义网页修改网址,使用ChromiumWebBrowser类的Load方法,直接直接输入网址,也可以加载本地的html文件。m_chromeBrowser.Load(“https://www….

    2022年9月19日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号