| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 4078 人关注过本帖, 1 人收藏
标题:system函数是 用法 的问题
只看楼主 加入收藏
Starlove
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2007-4-26
收藏
得分:0 
那么怎么在C懒得代码里嵌入bat的代码,并调用cmd.exe执行呢??
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++





2007-07-12 23:33
Starlove
Rank: 1
等 级:新手上路
帖 子:169
专家分:0
注 册:2007-4-26
收藏
得分:0 
...................................
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
2007-07-12 23:34
leeco
Rank: 4
等 级:贵宾
威 望:10
帖 子:1029
专家分:177
注 册:2007-5-10
收藏
得分:0 
回复:(Starlove)那么怎么在C懒得代码里嵌入bat的代...
你先调用
fopen
fprintf
写一个bat文件
再system
不就行了
2007-07-12 23:57
blackcoat
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-7-12
收藏
得分:0 

需要注意的是在TC下,调用system包含的头文件是
#include <process.h>

而在vc下包含的头文件则是
#include <stdlib.h>

而在使用的过程中需要注意的是system()
的输入是一个const char *的指针,command就是你需要调用的命令

如调用系统功能
system("dir");
system("type c:\1.txt");

除了调用系统功能,我们也可以调用其他的可执行文件,如调用(与编
译生成的exe)同一目录下的连连看游戏
system("Link.exe");

当调用不同目录下的其他可执行文件就需要考虑的路径的设置了
如调用上一级目录下的Link.exe就是这样调用的
相对路径:
system("..\\Link.exe");
绝对路径:
system("D:\\Game\\Link.exe");
这里第二个\前的\表示引用(红)

如同我们要printf \ 就需要
printf("\\");

所以
system("\..\\Link.exe");和system("..\\Link.exe");是一样的
system("D:\\Game\\Link.exe");和system("\D:\\Game\\Link.exe");也是一样的。

但是
system("\\D:\\Game\\Link.exe");就是无法正常调用的


相关参见:
system 函数声明

int _Cdecl system(const char *command);


2007-07-13 02:14
时光1997
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-12
收藏
得分:0 

函数名: system
功 能: 发出一个DOS命令
用 法: int system(char *command);
程序例:

#include <stdlib.h>
#include <stdio.h>

int main(void)
{
printf("About to spawn command.com and run a DOS command\n");
system("dir");
return 0;
}


人生学无止境,活到老,学到老!
2007-07-13 03:44
时光1997
Rank: 1
等 级:新手上路
帖 子:11
专家分:0
注 册:2007-7-12
收藏
得分:0 
这个是system函数的说明!与blackcoat说的有点出入!

人生学无止境,活到老,学到老!
2007-07-13 03:45
blackcoat
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-7-12
收藏
得分:0 

【转贴】供参考

_cdecl 是C Declaration的缩写,表示C语言默认的函数调用方法:所有参数从右到左依次入栈,这些参数由调用者清除,称为手动清栈。被调用函数无需要求调用者传递多少参数,调用者传递过多或者过少的参数,甚至完全不同的参数都不会产生编译阶段的错误。

_stdcall 是Standard Call的缩写,是C++的标准调用方式:所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。这些堆栈中的参数由被调用的函数在返回后清除,使用的指令是 retn X,X表示参数占用的字节数,CPU在ret之后自动弹出X个字节的堆栈空间。称为自动清栈。函数在编译的时候就必须确定参数个数,并且调用者必须严格的控制参数的生成,不能多,不能少,否则返回后会出错。

...

C中不加说明默认函数为_cdecl方式(C中也只能用这种方式),C++也一样,但是默认的调用方式可以在IDE环境中设置。

带有可变参数的函数必须且只能使用_cdecl方式,例如下面的函数:
int printf(char * fmtStr, ...);
int scanf(char * fmtStr, ...);

感谢原作者,
Best wishes,
by blackcoat

2007-07-13 20:05
blackcoat
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2007-7-12
收藏
得分:0 
而至于:

int _Cdecl system(const char *command);

中的"const"我想是为了限定对字符的修改

在程序中可以通过将指针类型限定为const达到参数保护的作用!
2007-07-13 20:09
千金散尽
Rank: 1
等 级:新手上路
威 望:2
帖 子:55
专家分:0
注 册:2007-5-23
收藏
得分:0 
"bad commd  or file name "  楼上的程序执行给出的提示 ,不能执行阿

才明白但已经晚了,希望结识想创业的朋友。
2007-07-13 21:18
ludingo1211
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2007-5-28
收藏
得分:0 
在程序中,
操作系统命令。

云带来了风,不,是风带去了云。QQ群6438659 请你不要一时冲动,对c不感兴趣的,请不要加入。
2007-07-14 13:34
快速回复:system函数是 用法 的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.022239 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved