关于C语言和命令行之间的交互问题

在Windows操作系统中,后缀为.exe的文件都是可执行文件。.exe是英文单词executable的缩写,意思是可执行的。凡是可执行的文件都是二进制的文件,计算机也只能识别二进制的文件。

后缀为.exe的文件是由C语言的源文件.c或C++的源文件.cpp编译而来。

在Windows操作系统中,凡是.exe的文件,都可以作为一条命令,在命令行中来执行。例如:在我的电脑D盘cPro文件夹中就有很多编译好的.exe可执行文件:

Win + R 键输入cmd,进入命令行:

然后输入命令进入到D:\cPro

cPro这个当前的文件目录下,就可以输入命令去执行这些可执行文件:
打印一个心形图

任意长度的二进制字符转换为十六进制



以上所有的可执行程序都是没有参数的,直接输入它的名字,就可以执行。本文的标题是和命令行进行交互,也就是说从命令行接收参数。在大多数情况下,我们写的C语言代码中,主函数都是没有参数的,如果想要和命令行进行交互,就需要主函数设置参数:

int main(int argc, char *argv[]){
	return 0;
}

其中argc是参数的个数,argv是一个字符串数组。

例如:从命令行接收参数,并把它们的参数打印出来:

#include<stdio.h>
int main(int argc, char *argv[]){
	int i;
	for(i = 0; i < argc; i++)
		printf("%s\n",argv[i]);

	return 0;
}

编译该段代码,把它放在D盘的cPro文件目录下,进入命令行:

其中tst是这个可执行程序的名字,后面一堆是它的参数。argv[0]的值为tstargv[1]的值为Jackeyargv[2]的值为Song,往后以此类推。参数的个数是不固定的。



也可以写一个程序,让这个程序自动在命令行输入命令,例如输入命令dir列出当前文件目录下的所有文件:

int main(){
	system("dir");
	return 0;
}

运行结果:

再例如写一个程序,这个程序去调用当前文件目录下的另外一个程序:

int main(){
	system("tst 黑夜无论怎样悠长 白昼总会到来 莎士比亚");
	return 0;
}

运行结果:



以上几个小案例,就很好地介绍了如何写C语言程序,去和命令行去交互,实现一个C程序调用另外一个C程序,或者从命令行接收参数,在把参数打印出来。

当然,我们可以实现稍微复杂的功能,例如:写一个自动创建源文件的程序,并把它添加到环境变量,这样我们就可以在任意文件目录下去使用它,下面这个代码就是自动创建Java源文件的程序:

#include <stdio.h>
#include <string.h>
int main(int argc, char *argv[]){
	char str[20];
	char ext[5] = ".java";
	int i;
	FILE *fp[argc];
	for(i = 1; i < argc; i++){
		strcpy(str,argv[i]);
		strcat(str,ext);
		fp[i] = fopen(str,"wb+");
		printf("%s源文件创建成功!\n",str);
		fclose(fp[i]);
	}

	return 0;
}

编译后给生成的可执行文件命名为newja,把它添加到环境变量,在命令行中调用它:




也可以写程序自动在命令行输入命令,调用newja这个程序,让它自动创建源文件:

int main(){
	system("newja aaa b cc e fdd");
	return 0;
}



和命令行交互,能做的事情远远不止这些,只要你能想到的,它就能做到。

到此这篇关于C语言和命令行之间的交互的文章就介绍到这了,更多相关C语言命令行交互内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • linux下c语言中隐藏进程命令行参数(例如输入密码等高危操作)

    前言 启动程序很多时候用命令行参数可以很方便,做到简化一些配置,但是输入用户名密码等操作,如果通过进程查看工具直接看到密码就太不安全了. 因此很有必要研究如何隐藏命令行参数中的某些字段,当然做成配置文件也是极好的,但是无疑给运行程序增加额外操作.编辑保存配置文件也会费点事. 我结合网上找到的一些方案,以及自己总结一个方案,记下笔记. 复写argv参数 该方案只在Linux下的C语言中验证成功,因为window下都是win32api获取命令行参数,但是没有设置这个,估计window不支持这种骚操作

  • C语言实现贪吃蛇游戏(命令行)

    这是一个纯C语言写的贪吃蛇游戏,供大家参考,具体内容如下 #include<stdio.h> #include<stdlib.h> #include<windows.h> #include<time.h> #include<conio.h> #define SNAKE_LENGTH 100//定义蛇的最大长度 #define SCREEN_WIDETH 80 #define SCREEN_HEIGHT 30 //定义每一节蛇的坐标 struct

  • 关于C语言和命令行之间的交互问题

    在Windows操作系统中,后缀为.exe的文件都是可执行文件..exe是英文单词executable的缩写,意思是可执行的.凡是可执行的文件都是二进制的文件,计算机也只能识别二进制的文件. 后缀为.exe的文件是由C语言的源文件.c或C++的源文件.cpp编译而来. 在Windows操作系统中,凡是.exe的文件,都可以作为一条命令,在命令行中来执行.例如:在我的电脑D盘cPro文件夹中就有很多编译好的.exe可执行文件: Win + R 键输入cmd,进入命令行: 然后输入命令进入到D:\c

  • C语言命令行参数的使用详解

    之前曾经使用过很多次c语言的命令行参数了,但是总是每次使用的时候都不太确定,需要重新查资料,这次来个总结.c语言的命令行参数非常简单,只需要一个简单的例子就可以说明: #include <stdio.h> void main(int argc,char** argv) { printf("%d\n",argc); printf("%s\n",argv[0]); printf("%s\n",argv[1]); printf("

  • PowerShell入门教程之PowerShell和Cmd命令行的关系?

    PowerShell是命令行的加强版吗?PowerShell能执行命令行的所有命令吗?PowerShell要替代命令行?这三个问题的答案足以让我们了解PowerShell与Cmd命令行之间的关系.让我们慢慢道来... PowerShell中的CMD命令 启动PowerShell,在其中输入几个常用的Cmd命令 复制代码 代码如下: PS D:\Projects\Practise\PowerShell> dir     Directory: D:\Projects\Practise\PowerSh

  • Python 获得命令行参数的方法(推荐)

    本篇将介绍python中sys, getopt模块处理命令行参数 如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢? 需要模块:sys 参数个数:len(sys.argv) 脚本名:    sys.argv[0] 参数1:     sys.argv[1] 参数2:     sys.argv[2] test.py import sys print "脚本名:", sys.argv[0] for i in range(1, len(sy

  • Go语言命令行操作命令详细介绍

    Go 命令 Go语言自带有一套完整的命令操作工具,你可以通过在命令行中执行go来查看它们: 图1.3 Go命令显示详细的信息 这些命令对于我们平时编写的代码非常有用,接下来就让我们了解一些常用的命令. go build 这个命令主要用于测试编译.在包的编译过程中,若有必要,会同时编译与之相关联的包. 1.如果是普通包,就像我们在1.2节中编写的mymath包那样,当你执行go build之后,它不会产生任何文件.如果你需要在$GOPATH/pkg下生成相应的文件,那就得执行go install了

  • Go语言执行系统命令行命令的方法

    本文实例讲述了Go语言执行系统命令行命令的方法.分享给大家供大家参考.具体如下: 执行Go代码时可以附加参数,包括要执行的命令和给命令的参数 复制代码 代码如下: package main import (   "os"   "os/exec"   "fmt"   "flag"   "strings" ) func main() {   command := flag.String("cmd&qu

  • go语言执行windows下命令行的方法

    本文实例讲述了go语言执行windows下命令行的方法.分享给大家供大家参考.具体如下: 在golang里执行windows下的命令行,例如在golang里面调用 del d:\a.txt 命令 复制代码 代码如下: package main import(     "fmt"     "os/exec" ) func main(){       c := exec.Command("cmd", "/C", "del

  • go语言通过管道连接两个命令行进程的方法

    本文实例讲述了go语言通过管道连接两个命令行进程的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: package main import (   "os"   "os/exec"   "fmt"   "flag"   "strings" ) func main() { generator := exec.Command("cmd1") consumer := exe

  • linux命令行下使用R语言绘图实例讲解

    使用系统:centos 6.4 64bit 在R语言中可以使用png()等函数生成图片,例如: png("aa.png")可以生成图片. 但是如果你是通过shell远程连接到系统上,可能会碰到如下错误: > png("aa.png") 错误于.External2(C_X11, paste("png::", filename, sep = ""), g$width,  :    无法打开PNG设备 此外: 警告信息: In

随机推荐