当前位置:文档之家› 关于int main(int argc, char argv[])的一些解读By Richard

关于int main(int argc, char argv[])的一些解读By Richard

关于int main(int argc, char argv[])的一些解读By Richard
关于int main(int argc, char argv[])的一些解读By Richard

关于int main(int argc, char *argv[])的一些解读By Richard argc是命令行总的参数个数,即argv的参数个数,不需要我们输入。当我们输入命令后会自己判断个数。

argv[]是我们输入的命令参数,其中argv[0]是程序的名字,即编译后的程序名,比如说是:Test.exe

举例详细说明:(环境是VS2008)

#include

int main(int argc, char *argv[])

{

printf("argc=%d\n",argc);

for (int i=0;i

printf("%s\n",argv[i]);

return 0;

}

生成解决方案后,在Debug文件夹下会有Test.exe。

方法一:

Windows键+R,输入cmd,进入命令提示符窗口,输入

cd C:\Users\Administrator\Desktop\SDK源代码\Test\Debug

进入Test.exe的文件目录

输入:Test.exe Hello World

输出:

argc=3

Test.exe(argv的第一个参数名是程序名称)

Hello

World

方法二:

在VS2008中加命令参数(更加方便)

右击Test,选择【属性】-【配置属性】-【调试】,在右边第二行【命令参数】输入Test.exe Hello World

输出:

argc=4

C:\Users\Administrator\Desktop\SDK源代码\Test\Debug\Test.exe Test.exe

Hello

World

为什么参数变成4个了呢?

原因是我们没设置程序的路径,如果设置了,就不会出现这个多余的argv

如何设置呢?

右击Test,选择【属性】-【配置属性】-【调试】,在右边第一行【命令】

选择Test.exe的路径,即

C:\Users\Administrator\Desktop\SDK源代码\Test\Debug\Test.exe

之后,在【命令参数】中只需输入参数Hello World即可

这时输出是:

argc=3

C:\Users\Administrator\Desktop\SDK源代码\Test\Debug\Test.exe Hello

World

============================================= 下面详细的说明一个具体的例子(关于cudaEncoder的一个程序,在CUDA SDK4.0中可以找到源程序,这里仅是main.cpp中的一个输入参数函数)static char *sAppName= "CUDA H.264 Encoder";

static char *sAppFilename = "cudaEncode.exe";

//输入输出及配置文件

#define VIDEO_SOURCE_FILE"plush_480p_60fr.yuv"

#define VIDEO_CONFIG_FILE"704x480-h264.cfg"

#define VIDEO_OUTPUT_FILE"plush_480p_60fr.264"

//我们关注的函数开始

bool ParseInputParams(int argc, char *argv[], NVEncoderParams

*pParams)

// NVEncoderParams是一个关于编码器的结构体,不考虑它,一些不需要的操作这里都删掉

{

int argcount=0;

printf("[ %s ]\n", sAppName);

for (argcount=0; argcount< argc; argcount++) {

printf(" argv[%d] = %s\n", argcount, argv[argcount]);

}//argv[0]为程序名称

printf("\n");

if (argc > 1) {//输入参数不输入时为1(默认配置),其他情况下都大于1 int filename_length = 0;

for (argcount = 1; argcount < argc; argcount++) {

int string_start = 0;

while (argv[argcount][string_start] == '-')

string_start++;

const char *string_argv = &argv[argcount][string_start];

//这样理解:当输入的为cudaEncoder.exe –qatest时,argv[0]为cudaEncoder.exe,argv[1]为-qatest,argv[1][0]即为“-”,遇到该符号,string_argv存储“-”后面的字符串。“-”作用是标记符,应用很广。

if(!stricmp(string_argv, "qatest")) {

//stricmp函数:比较,如果相同,返回0.(不区分大小写)我们输入参数时,可以大写,也可以小写,这样很方便

//strcmp函数:区分大小写

char * filePath = NULL;

bQAtest = true;

pParams->iSurfaceFormat = YV12;

if ( (filePath = cutFindFilePath(VIDEO_SOURCE_FILE, argv[0])) != NULL) {

strcpy(pParams->inputFile, filePath);

//输入文件参数传给函数

}

if ( (filePath = cutFindFilePath(VIDEO_CONFIG_FILE, argv[0])) != NULL) {

strcpy(pParams->configFile, filePath);

//配置文件参数传给函数

}

strcpy(pParams->outputFile, VIDEO_OUTPUT_FILE);

//输出文件参数传给函数

continue;//作用是读完一个参数,退出这次循环,进行下一个循环,读取下一个参数

}

if(!stricmp(string_argv, "noprompt")) {

bNoPrompt = true;

continue;

}

if (!strnicmp(string_argv, "device", 6)) {

//strnicmp比较前n个字符串,不区分大小写

//strncmp比较前n个字符串,区分大小写

//用于读取device=1这样的输入参数

/*************************************************************************** C语言库函数名: atoi

功能: 把字符串转换成整型数.

名字来源:array to integer 的缩写.

原型: int atoi(const char *nptr);

函数说明: 参数nptr字符串,如果第一个非空格字符不存在或者不是数字也不是正负号则返回零,否则开始做类型转换,之后检测到非数字或结束符\0 时停止转换,返回整型数。

头文件: #include

**********************************************************************/

pParams->force_device = 1;

if (string_argv[6] == '=') {

pParams->iForcedGPU = atoi(&(argv[argcount][7]));

} else {//从第七个字符开始,前6个为”device=”

printf("Invalid # of arguments -device=n requires n to be an integer\n");

}

continue;

}

if (!strnicmp(string_argv, "format=", 7)) {

printf("YUV Surface Format: ");

if (!strnicmp(&string_argv[7], "UYVY", 4)) {

pParams->iSurfaceFormat = (int)UYVY;

} else if (!strnicmp(&string_argv[7], "YUY2", 4)) {

pParams->iSurfaceFormat = (int)YUY2;

} else if (!strnicmp(&string_argv[7], "YV12", 4)) {

pParams->iSurfaceFormat = (int)YV12;

} else if (!strnicmp(&string_argv[7], "NV12", 4)) {

pParams->iSurfaceFormat = (int)NV12;

} else if (!strnicmp(&string_argv[7], "IYUV", 4)) {

pParams->iSurfaceFormat = (int)IYUV;

}

//之所以能把YUV2之类的转为int型,是因为在库函数中有定义,他们本身就是用数字对应着的

printf("%s\n",

sSurfaceFormat[pParams->iSurfaceFormat]);

continue;

}

if (!strnicmp(string_argv, "pictype=", 8)) {

printf("Frame Type: ");

pParams->iPictureType = atoi(&(argv[argcount][9]));

if (pParams->iPictureType >= 1 &&

pParams->iPictureType <= 3) {

printf("%s\n",

sPictureStructure[pParams->iPictureType]);

} else {

printf(" %d is invalid!\n", pParams->iPictureType);

}

continue;

}

if (!strnicmp(string_argv, "offload=", 8)) {

printf("GPU Offload Mode: ");

if (!strnicmp(&argv[argcount][8], "partial", 7)) {

pParams->GPUOffloadLevel =

NVVE_GPU_OFFLOAD_ESTIMATORS;

printf("<%s>\n", sGPUOffloadLevel[1]);

} else if (!strnicmp(&argv[argcount][8], "full", 4)) {

pParams->GPUOffloadLevel =

NVVE_GPU_OFFLOAD_ALL;

printf("<%s>\n", sGPUOffloadLevel[2]);

} else {

pParams->GPUOffloadLevel =

NVVE_GPU_OFFLOAD_ESTIMATORS ;

printf("<%s>\n", sGPUOffloadLevel[1]);

}

continue;

}

if (!strnicmp(string_argv, "vmeminput", 9)) {

if (string_argv[9] == '=') {

pParams->iUseDeviceMem = atoi(&(string_argv[10]));

} else {

// We just assume that we always enable it

pParams->iUseDeviceMem = 1;

}

continue;

}

filename_length = (int)strlen(string_argv);

if (!strnicmp(&string_argv[filename_length-4], ".yuv", 4) || !strnicmp(&string_argv[filename_length-4], ".yuy2", 5) || //这里为什么是-4呢,我认为应该是-5,不知原因,求解???

!strnicmp(&string_argv[filename_length-4], ".yv12", 5) || //还有这里

!strnicmp(&string_argv[filename_length-4], ".nv12", 5) || !strnicmp(&string_argv[filename_length-4], ".avi", 4)) {

strcpy(pParams->inputFile, string_argv);

continue;

}

if (!strnicmp(&string_argv[filename_length-4], ".cfg", 4)) {

strcpy(pParams->configFile, string_argv);

continue;

}

if (!strnicmp(&string_argv[filename_length-4], ".264", 4) ||

!strnicmp(&string_argv[filename_length-4], ".h264", 5)) {

strcpy(pParams->outputFile, string_argv);

continue;

}

}

} else {

// This is demo mode, we will print out the help, and run the encode

printf("\n[Demonstration Mode]\n\n");

bQAtest = true;

bDemoMode = true;

pParams->iSurfaceFormat = YV12;

char *filePath = NULL;

if ( (filePath = cutFindFilePath(VIDEO_SOURCE_FILE, argv[0])) != NULL) {

strcpy(pParams->inputFile, filePath);

}

if ( (filePath = cutFindFilePath(VIDEO_CONFIG_FILE, argv[0])) != NULL) {

strcpy(pParams->configFile, filePath);

}

strcpy(pParams->outputFile, VIDEO_OUTPUT_FILE);

}

if (argc < 4 && !bQAtest) {

return false;

}

if(!strlen(pParams->configFile)) {

printf("\n *.cfg config file is required to use the encoder\n");

return false;

}

if(!strlen(pParams->inputFile)) {

printf("\n *.yuv input file is required to use the encoder\n");

return false;

}

if(!strlen(pParams->outputFile)) {

printf("\n *.264 output file is required to use the encoder\n");

return false;

}

return true;

}

c语言中命令行参数argc,argv

main( int argc, char ** argv ) argv:指针的指针 argc:整数 char **argv or char *argv[] or char argv[][] 为了能形象的说明这两个参数的含义,我们先用一个实例来进行讲解: 假设程序的名称为test,当只输入test,则由操作系统传来的参数为: argc = 1,表示只有一程序名称; argc只有一个元素,argv[0]指向输入的程序路径及名称:./ test 当输入test para_1,有一个参数,则由操作系统传来的参数为: argc = 2,表示除了程序名外还有一个参数; argv[0]指向输入的程序路径及名称; argv[1]指向参数para_1字符串 当输入test para_1 para_2 有2个参数,则由操作系统传来的参数为: argc = 3,表示除了程序名外还有两个参数; argv[0]指向输入的程序路径及名称; argv[1]指向参数para_1字符串; argv[2]指向参数para_2字符串; 以此类推……………… void main( int argc, char *argv[] ) char *argv[]: argv是一个指针数组,元素个数是argc,存放的是指向每一个参数

的指针,第一个元素即argv[0]为程序运行的全路径名,从二个元素(argv[1])开始,是每一个参数的名称,最后一个元素为NULL。总的来说,即: * argv: 字符串数组 argv[0] 为程序运行的全路径名 argv[1] 为执行程序名后的第一个字符串; argv[2] 为执行程序名后的第二个字符串; ... argv[argc]为NULL。 int argc:表示argv的大小,是实际参数个数+1,其中+1是因为argv[0]是编译后的可执行文件名 main() 参数: Turbo C2.0启动时总是把argc、argv、env(存放环境变量)这三个参数传递给main()函数, 可以在用户程序中说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序的局部变量。 请注意: 一旦想说明这些参数, 则必须按argc, argv, env 的顺序, 如以下的例子: main() main(int argc) main(int argc, char *argv[]) main(int argc, char *argv[], char *env[]) 其中第二种情况是合法的, 但不常见, 因为在程序中很少有只用argc, 而不 用argv[]的情况。 以下提供一样例程序EXAMPLE.EXE, 演示如何在main()函数中使用三个参数: /*program name EXAMPLE.EXE*/ #i nclude

c语言习题.doc

1.C语言中,int型数据在计算机内部是由()表示的。 答:int型数据在计算机内部是由16位补码表示的。 2.下列可以作为C语言用户标识符的是()。 A) _123 B) a1b2c3 C) int D) 123abc 答:A)和B) C语言标识符必须是以英文字母(a到z)、或者下划线_开头的字符串。字符串中只能包含英文字母、下划线和数字(0到9)。但字符串不能是C语言中的32个保留字(例如int,short,long,unsigned,float,char,if,switch,for,while等)。 3.在C语言中,如果下面的变量都是int类型,则输出的结果是()。 sum=pad=5,pAd=sum++,pAd++,++pAd; printf("%d\n",pad); 答:输出结果是5。 因为C语言是字母大小写敏感的,也就是说区分大小写字母。pad和pAd是两个不同的变量。4.以下程序的输出结果是( )。 #include main() { printf("%d\n",NULL); } 答:0 因为stdio.h头文件中NULL的定义如下: #define NULL 0 5.下面程序的输出是()。 main() { int x=10,y=3; printf("%d\n",y=x/y); } 答:3 因为两个同类型的数据作算术运算,其结果仍为该类型。即整数除以整数,商仍为整数。 10/3的商为3。 6.下面程序的输出是()。 main() { int x=023; printf("%d\n",--x); } 答:18 因为023是一个八进制数,表达式--x的值为022,按照%d带符号的十进制数输出,结果为18。 注意:023是八进制数;23是十进制数;0x23是十六进制数。 7.在C语言中,不正确的int类型的常数是()。 A)32768 B)0 C)037 D)0xAF 答:A) 8.执行下面程序中的输出语句后a的值是()。

main函数的命令行参数

main函数的命令行参数 前面所用到的main函数都是不带参数的,即main()。其实main函数也可以有参数,只是它的参数之一是指针数组。 1.main函数中可以写两个形参,一般形式如下:main(int argc,char *argv[ ]); 2.说明:第一个形参argc是一个整型变量,第二个形参argv是一个指针数组,其元素指向字符型数据。 1 若以下程序所生成的可执行文件名为filel.exe ; 当输入以下命令行执行该程序 时,FILE1 CHINA BEIJING SHANGHAI程序的输出结果是()。 main( int argc,char *argv[]) { while(argc-->0) { ++argv; printf("%s",*argv);} } A)CHINA BEIJING SHANGHAI B)FILE1 CHINA BEIJING C)C B S D)F C B 2 假定下列程序的可执行文件名为prg.exe,则在该程序的子目录下输入命令行: main(int argc,char *argv[ ]) { int i; if(argc<=0) return; for(i=1;i后程序的输出结果是()。 A)hello good B)hg C)hel D)hellogood 3 假定以下程序经编译和连接后生成可执行文件PROG.EXE,如果在此可执行文件所在录的DOS提示符下键入:PROG ABCDEFGH IJKL<回车>,则输出结果为()。 main( int argc, char *argv[])) { while(--argc>0) printf("%s",argv[argc]); printf("\n"); } A) ABCDEFG B) IJHL C) ABCDEFGHIJKL D) IJKLABCDEFGH 4 不合法的main函数命令行参数表示形式是()。 A) main(int a,char *c[]) B) main(int arc,char **arv) C) main(int argc,char *argv) D) main(int argv,char *argc[]) 5 有以下程序:程序编译连接后生成的可执行文件是exl.exe,若运行时输入带参数的命令行是exl abcd efg 10<回车>则运行的结果是()。 #include main(int argc,char *argv[]) { int i,len=0; for (i=1; i,则运行结果为()。 main(int argc, char *argv[]) { int n,i=0; while(argv[1][i]!= '\0') { n=fun(); i++;} printf("%d\n",n*argc); } int fun() { static int s=0; s+=1; return s; } A)6 B)8 C)3 D)4

C语言编程实战-4-命令行参数(main函数)处理

命令行(main函数)参数处理 我们在执行某某命令的时候,经常会传入一些参数,告诉程序做不同的处理。如使用gcc编译程序时,我们经常会在后边指定c源码文件,如gcc test.c。我们自己写的程序,如何能够算其它命令一样,能够接收和处理不同的参数呢?答案是肯定的。我们今天来介绍自写程序对命令行参数的处理。 一个标准的C程序,其主函数通常是这样子定义的: int main(int argc,char *argv[]) { //用户代码 return xxx; } main函数有两个参数:argc与agv,前者是一个整数,表示命令行给程序参数的个数,后者是一个字符串数组,用于顺次存放命令行传给程序的参数,通过argc与argv,我们就能实现对命令行参数的处理。 对每一个程序而言,程序的名称总会作为命令行的第一个参数传给它的主函数,那怕命令行中并没有传任何参数。因此,主函数的参数argc最小值为1,argv[0]总是存放命令程序名。因此,假使test是我们程序的名字,如果执行: test 则main函数得到的参数是:argc = 1, argv = {“test”}; 如果执行: test arg1 arg2 则main函数得到的参数是:argc = 3, argv = {“test”, “arg1”, “arg2”}; 如此类推。 通过上面的讲解,我们不难在main函数中实现对命令行参数的代码。我们接下来做一个编程任务: 写一个程序,该程序接收两个参数,这两个参数都是整数,程序中需将这两个整数的和与差计算并输出到屏幕上。假设程序的名称为cal,在命令行执行: cal 10 15 则程序输出: 10 + 15 = 25 10 – 15 = -5 如果输入的参数不合法,则提示参数错误。 代码实现: #include

主函数main

①主函数main() ②保存单链表函数save() ③重载操作菜单函数load() ④显示单链表内容函数display () ⑤插入元素函数insert () ⑥删除元素函数decelt () ⑦修改元素函数modify() 各函数间关系如下: #include "stdafx.h" #include #include typedef char ElemType; struct LNode { ElemType data; struct LNode *next; }; //***********************************************************置空表setnull() void setnull(struct LNode **p) { *p=NULL; } //************************************************************求长度length() int length(struct LNode **p) { int n=0; struct LNode *q=*p; while (q!=NULL) { n++; q=q->next; }

return(n); } //*************************************************************取结点get() ElemType get(struct LNode **p,int i) { int j=1; struct LNode *q=*p; while (jnext;j++; } if (q!=NULL) /**//*找到了第i个结点*/ return(q->data); else { printf("位置参数不正确!\n"); return NULL; } } //************************************************************按值查找locate() int locate(struct LNode **p,ElemType x) { int n=0; struct LNode *q=*p; while (q!=NULL && q->data!=x) /**//*查找data域为x的第一个结点*/ { q=q->next; n++; } if (q==NULL) /**//*未找到data域等于x的结点*/ return(-1); else /**//*找到data域等于x的结点*/ return(n+1); }

带参数main函数

main函数也可以带参数。带参数main函数的定义格式如下: void main(int argc, char *argv[]) { ... ... } argc和argv是main函数的形式参数。这两个形式参数的类型是系统规定的。如果main函数要带参数,就是这两个类型的参数;否则main函数就没有参数。变量名称argc和argv 是常规的名称,当然也可以换成其他名称。 那么,实际参数是如何传递给main函数的argc和argv的呢?我们知道,C程序在编译和链接后,都生成一个exe文件,执行该exe文件时,可以直接执行;也可以在命令行下带参数执行,命令行执行的形式为: 可执行文件名称参数1 参数2 ... ... 参数n 执行文件名称和参数、参数之间均使用空格隔开。例如,在linux下运行程序./a.out 1 2 ,可执行文件名称为./a.out,参数1为字符串1,参数2为2。 如果按照这种方法执行,命令行字符串将作为实际参数传递给main函数。具体为: (1) 可执行文件名称和所有参数的个数之和传递给argc;所以上面的argc=3 (2) 可执行文件名称(包括路径名称)作为一个字符串,首地址被赋给argv[0],参数1也作为一个字符串,首地址被赋给argv[1],... ...依次类推。 本回答专业性由科学教育分类达人陶文认证 满意回答 运行方法: (假设你的程序为Untitled1.exe) 打开命令提示符: 转到你的Untitled1.exe的目录, 输入下列命令: Untitled1.exe a basdfsa 1314324 -k -f 回车就可以运行了。 这时,在Main函数里定义的 int main(int argc, char *args[]) 里的argc = 6,就是表示有六个参数, 对应的 args[0] = "Untitled1.exe"; args[1] = "a"; args[2] = "basdfsa"; args[3] = "1314324"; args[4] = "-k"; args[5] = "-f"; 就是这样子了。

(完整版)C语言试题及答案解析

C语言 一、选择题(第题2分,共20分) 1.一个C程序的执行是从 A 。 A) 本程序的main函数开始,到main函数结束 B) 本程序文件的第一个函数开始,到本程序文件的最后一个函数结束 C) 本程序文件的第一个函数开始,到本程序main函数结束 D) 本程序的main函数开始,到本程序文件的最后一个函数结束 2.若x、i、j、k都是int型变量,则计算下面表达式后,x的值为 C 。 x=(i=4,j=16,k=32) A) 4 B) 16 C) 32 D) 52 3.设C语言中,一个int型数据在内存中占2个字节,则unsigned int 型数据的取值范围为 C 。 A) 0~255 B) 0~32767 C) 0~65535 D) 0~2147483647 4.设有说明:char w; int x; float y; double z;则表达式w*x+z-y值的数据类型为 D 。 A) float B) char C) int D) double 5. putchar函数可以向终端输出一个 D 。 A) 整型变量表达式 B) 实型变量值 C) 字符串 D) 字符或字符型变量值 6. printf函数中用到格式符%5s,其中数字5表示输出的字符串占用5列。如果字符串长度大于5,则输出按方式 B ;如果字符串长度小于5,则输出按方式 C 。 A) 从左起输出该字符串,右补空格 B) 按原字符长从左向右全部输出 C) 右对齐输出该字符串,左补空格 D) 输出错误信息 7.判断char型变量ch是否为大写字母的正确表达式是 C 。 A) ‘A’<=ch<=‘Z’ B) (ch>=‘A’)&(ch<=‘Z’) C) (ch>=‘A’)&&(ch<=‘Z’) D) (‘A’<= ch)AND(‘Z’>= ch) 8.已知int x=10,y=20,z=30;以下语句执行后x,y,z的值是 B 。 if(x>y) z=x; x=y; y=z; A) x=10, y=20, z=30 B) x=20, y=30, z=30 C) x=20, y=30, z=10 D) x=20, y=30, z=20 9.以下程序段______C__. x=-1; do{ x=x*x; } while(!x); A)是死循环 B)循环执行二次 C)循环执行一次 D)有语法错误 10.以下正确的描述是___B____. A)continue语句的作用是结束整个循环的执行

C语言基本类型字符型(char)用法介绍

C语言基本类型:字符型(char)用法介绍 1.字符型(char)简介 字符型(char)用于储存字符(character),如英文字母或标点。严格来说,char 其实也是整数类型(integer type),因为char 类型储存的实际上是整数,而不是字符。计算机使用特定的整数编码来表示特定的字符。美国普遍使用的编码是ASCII(American Standard Code for Information Interchange 美国信息交换标准编码)。例如:ASCII 使用65 来代表大写字母A,因此存储字母A 实际上存储的是整数65。注意:许多IBM大型机使用另一种编码——EBCDIC(Extended Binary-Coded Decimal Interchange Code 扩充的二进制编码的十进制交换码);不同国家的计算机使用的编码可能完全不同。 ASCII 的范围是0 到127,故而7 位(bit)就足以表示全部ASCII。char 一般占用8 位内存单元,表示ASCII绰绰有余。许多系统都提供扩展ASCII(Extended ASCII),并且所需空间仍然在8 位以内。注意,不同的系统提供的扩展ASCII 的编码方式可能有所不同! 许多字符集超出了8 位所能表示的范围(例如汉字字符集),使用这种字符集作为基本字符集的系统中,char 可能是16 位的,甚至可能是32 位的。总之,C 保证char 占用空间的大小足以储存系统所用的基本字符集的编码。C 语言定义一个字节(byte)的位数为char 的位数,所以一个字节可能是16 位,也可能是32 位,而不仅仅限于8 位。 2. 声明字符型变量 字符型变量的声明方式和其它类型变量的声明方式一样: char good; char better, best; 以上代码声明了三个字符型变量:good、better,和best。 3. 字符常量与初始化 我们可以使用以下语句来初始化字符型变量: charch = 'A'; 这个语句把ch的值初始化为A 的编码值。在这个语句中,'A' 是字符常量。C 语言中,使用单引号把字符引起来就构成字符常量。我们来看另外一个例子: char fail; /* 声明一个字符型变量*/ fail = 'F'; /* 正确*/ fail = "F"; /* 错!"F" 是字符串字面量*/

int main参数详解

int main(int argc,char* argv[])详解 argc是命令行总的参数个数 argv[]是argc个参数,其中第0个参数是程序的全名,以后的参数 命令行后面跟的用户输入的参数,比如: int main(int argc, char* argv[]) { int i; for (i = 0; i>i; return 0; } 执行时敲入 F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE aaaa bbb ccc ddd 输出如下: F:\MYDOCU~1\TEMPCODE\D1\DEBUG\D1.EXE aaaa bbb ccc ddd -------------------------------------------------------------------- char *argv[]是一个字符数组,其大小是int argc,主要用于命令行参数argv[] 参数,数组里每个元素代表一个参数; 比如你输入 test a.c b.c t.c 则 argc = 4 argv[0] = "test" argv[1] = "a.c" argv[2] = "b.c" argv[3] = "t.c" -------------------------------------------------------------------------------------------- argc记录了用户在运行程序的命令行中输入的参数的个数。 arg[]指向的数组中至少有一个字符指针,即arg[0].他通常指向程序中的可执行文件的文件名。在有些版本的编译器中还包括程序 文件所在的路径。 ------------------------------------------------------------------------- 在调用一个可执行程序时,某些情况下需要向程序传递参数。如我们可以在控制台中键入notepad.exe, 回车后将执行记事本程序。如果我们希望在打开notepad时同时打开一个文本文件,可以在notepad.exe

C语言基础练习100题(含标准答案)

C语言基础练习100题(含答案) 雷柳青编排 1、下面程序的输出是________ #include void main() { int k=11。 printf("k=%d,k=%o,k=%x\n",k,k,k)。 } A) k=11,k=12,k=11 B) k=11,k=13,k=13 C) k=11,k=013,k=0xb D) k=11,k=13,k=b 2、在下列选项中,不正确的赋值语句是________. A) ++t。B) n1=(n2=(n3=0))。 C) k=i=j。D) a=b+c=1。 3、下面合法的C语言字符常量是__________. A) '\t' B) "A" C) 65 D) A 4、字符(char)型数据在微机内存中的存储形式是____. A) 反码B) 补码C) EBCDIC码D) ASCII码 5、设int a=12,则执行完语句a+=a-=a*a后,a的值是________ A) 552 B) 264 C) 144 D) -264 6、执行下面程序中的输出语句后,输出结果是______. #include void main() {int a。 printf("%d\n",(a=3*5,a*4,a+5))。 } A) 65 B) 20 C) 15 D) 10 7、下面程序的输出是__________. #include void main() {int x=023。 printf("%d\n",--x)。 } A) 17 B) 18 C) 23 D) 24 8、下面程序的输出是___________. #include void main() {char ch1,ch2。 ch2='A'+'6'-'3'。 printf("%d,%c\n",ch1,ch2)。 } A) 67,D B) B,C C) C,D D) 不确定的值 9、以下程序的输出结果是________. #include void main() { int x=10,y=10。 printf("%d %d\n",x--,--y)。 } A) 10 10 B) 9 9 C) 9 10 D) 10 9 10、若x和y都是int型变量,x=100,y=200,且有下面的程序片段: printf("%d",(x,y))。 上面程序片段的输出结果是_______. A) 200 B) 100 C) 100 200 D) 输出格式符不够,输出不确定的值 11、阅读下面的程序 #include void main() { int i,j。 i=010。 j=9。 printf("%d,%d",i-j,i+j)。 } 则程序的运行结果是________. A) 1,19 B) -1,19C) 1,17 D) -1,17 12、阅读下面的程序 #include void main() { int i,j,m,n。 i=8。j=10。 m=++i。 n=j++。 printf("%d,%d,%d,%d",i,j,m,n)。 } 程序的运行结果是_________. A) 8,10,8,10 B) 9,11,8,10

关于main函数的(int argc,char argv[])

main(int argc,char *argv[ ]) argv为指针的指针 argc为整数 char **argv or: char *argv[] or: char argv[][] main()括号内是固定的写法。 下面给出一个例子来理解这两个参数的用法: 假设程序的名称为prog, 当只输入prog,则由操作系统传来的参数为: argc=1,表示只有一程序名称。 argc只有一个元素,argv[0]指向输入的程序路径及名称:./prog 当输入prog para_1,有一个参数,则由操作系统传来的参数为: argc=2,表示除了程序名外还有一个参数。 argv[0]指向输入的程序路径及名称。 argv[1]指向参数para_1字符串。 当输入prog para_1 para_2 有2个参数,则由操作系统传来的参数为: argc=3,表示除了程序名外还有2个参数。 argv[0]指向输入的程序路径及名称。 argv[1]指向参数para_1字符串。 argv[2]指向参数para_2字符串。 void main( int argc, char *argv[] ) char *argv[] : argv 是一个指针数组,他的元素个数是argc,存放的是指向每一个参数的指针, 他的第一个元素即argv[0]为编译生成的可执行文件名(包括路径eg:"F:\VC\Ex1\Debug\Ex1.exe"),从二个元素(argv[1])开始,是每一个参数int argc 表示argv的大小,是实际参数个数+1,其中+1是因为argv[0]是编译后的可执行文件名main()主函数 每一C 程序都必须有一main()函数, 可以根据自己的爱好把它放在程序的某个地方。有些程序员把它放在最前面, 而另一些程序员把它放在最后面, 无论放 在哪个地方, 以下几点说明都是适合的。 1. main() 参数 在Turbo C2.0启动过程中, 传递main()函数三个参数: argc, argv和env。 * argc: 整数, 为传给main()的命令行参数个数。 * argv: 字符串数组。 在DOS 3.X 版本中, argv[0] 为程序运行的全路径名; 对DOS 3.0 以下的版本, argv[0]为空串("") 。 argv[1] 为在DOS命令行中执行程序名后的第一个字符串; argv[2] 为执行程序名后的第二个字符串; ... argv[argc]为NULL。 *env: 安符串数组。env[] 的每一个元素都包含ENVV AR=value形式的字符串。其中ENVV AR为环境变量如PA TH或87。value 为ENVV AR的对应值如C:\DOS, C: \TURBOC(对于PA TH) 或YES(对于87)。 Turbo C2.0启动时总是把这三个参数传递给main()函数, 可以在用户程序中说明(或不说明)它们, 如果说明了部分(或全部)参数, 它们就成为main()子程序的局部变量。

c c++ main 函数命令行参数的使用 知识小结

c/c++ main 函数命令行参数的使用知识小结 2012-12-31 13:13:43 我来说两句作者:wu_lai_314 收藏我要投稿C程序最大的特点就是所有的程序都是用函数来装配的。main()称之为主函数,是所有程 序运行的入口。其余函数分为有参或无参两种,均由main()函数或其它一般函数调用,若调用 的是有参函数,则参数在调用时传递。 C/C++语言中的main函数,经常带有参数argc,argv,如下: int main(int argc, char** argv)int main(int argc, char* argv[])从函数参数的形式上看,包含一个整型和一个指针数组。当一个C/C++的源程序经过编译、链接后,会生成扩展名为.EXE的可执行文件,这是可以在操作系统下直接运行的文件,换句话说,就是由系统来启动运行的。对main()函数既然不能由其它函数调用和传递参数,就只能由 系统在启动运行时传递参数了。 在操作系统环境下,一条完整的运行命令应包括两部分:命令与相应的参数。其格式为: 命令参数1参数2....参数n? 此格式也称为命令行。命令行中的命令就是可执行文件的文件名,其后所跟参数需用空格分隔,并为对命令的进一步补充,也即是传递给main()函数的参数。 命令行与main()函数的参数存在如下的关系: 设命令行为:program str1 str2 str3 str4 str5 其中program为文件名,也就是一个由program.c经编译、链接后生成的可执行文件program.exe,其后各跟5个参数。对main()函数来说,它的参数argc记录了命令行中命令与参数的个数,共6个,指针数组的大小由参数argc的值决定,即为char*argv[6],指针数组的取值情况如图6-15所示。

Main函数参数argc,argv说明

Main函数参数argc,argv说明 C/C++语言中的main 函数,经常带有参数argc,argv,如下:int main(int argc, char** argv) int main(int argc, char* argv[]) 这两个参数的作用是什么呢?argc 是指命令行输入参数的个数,argv 存储了 所有的命令行参数。假如你的程序是hello.exe,如果在命令行运行该程序,(首 先应该在命令行下用cd 命令进入到hello.exe 文件所在目录)运行命令为:hello.exe Shiqi Yu 那么,argc 的值是3,argv[0]是”hello.exe”,argv[1]是”Shiqi”,argv[2]是”Yu”。 下面的程序演示argc 和argv 的使用: #include int main(int argc, char ** argv) { int i; for (i=0; i 假如上述代码编译 为hello.exe,那么运行 hello.exe a b c d e 将得到 Argument 0 is hello.exe. Argument 1 is a. Argument 2 is b. Argument 3 is c. Argument 4 is d. Argument 5 is e.运行 hello.exe lena.jpg 将得到 Argument 0 is hello.exe. Argument 1 is lena.jpg.================================#include #include #include int main(int argc ,char * argv[]){int i;char arg[6][15]={0};printf(“argc: %d /n”,argc);for(i=0;i{sprintf(arg[i],”%s” ,argv[i]);}//for(i=1;i//printf(“%s/n”,arg[i]);execlp(“/bin/mkdir”,”mkdir”,arg[1],NULL); return 1;}======================================清单 2. BusyBox 使 用argv[0] 来确定调用哪个应用程序// test.c #include int main( int argc, char

设 char ch

设 char ch; 以下不正确的赋值语句是_____。 选择一个答案 A. ch=68; B. ch="\\"; C. ch='\xef'; D. ch='\123'; 在 C 语言中int, long, unsigned 和 char这四种类型数据的转换规律是_____。 选择一个答案 a. char->int->long->unsigned b. int->unsigned->long->char c. char->int->unsigned->long d. char->unsigned->long->int 设a=2,b=3;则表达式a^b>>2的值是_____。 选择一个答案 A. 00000100 B. 00000011 C. 00000110 D. 00000010 以下关于源程序与目标程序的关系,不正确的是。 选择一个答案 A. 用C语言编写的源程序需要经过编译程序编译为目标程序

B. 不同高级语言的编译器应该是一样的,都负责将源程序编译为目标程序 C. 用机器语言编写的源程序就是目标程序 D. 用汇编语言编写的源程序需要经过汇编程序汇编为目标程序 C语言中,“\x5d”在内存中占用的字节数是____。 选择一个答案 A. 4 B. 5 C. 1 D. 2 下列符号中能用作C标识符的是____。 选择一个答案 A. break B. 2xy C. _abc D. &a3 有如下程序段: int a1,a2; char c1,c2; scanf("%d%c%d%c",&a1,&c1,&a2,&c2); 若要求 a1,a2,c1,c2 的值分别为 10 , 20 , A , B 正确的数据输入是______。

上海海事大学-C语言试卷

试卷编号:9049 所属语言:Turbo C 试卷方案:09(2) 模拟试卷总分:100分 共有题型:5种 一、填空共15题(共计15分) 第1题(1.0分) C语言表达式!(3<6)||(4<9)的值是【1】. 答案: 1). 1 第2题(1.0分) int a=1,b=2,c=3; 执行语句a=b=c;后a的值是【1】. 答案: 1). 3 第3题(1.0分) 以下程序的输出结果为【1】, #include "stdio.h" main(){int a=010,j=10;printf("%d,%d\n",++a,j--);} 答案: 1). 9,10 第4题(1.0分) 执行下列语句的结果是 【1】,a=3;printf("%d,",++a);printf("%d" ,a++); 答案: 1). 4,4 第5题(1.0分) 当a=1,b=2,c=3时,执行以下程序段后b=【1】. if (a>c) b=a; a=c; c=b; 答案: 1). 2 第6题(1.0分) 假设有条件 int x=1,y=2,z=3;则表达式 z+=x>y?++x:++y的值是【1】. 答案: 1). 6 第7题(1.0分) 执行下列语句后,b 的十进制值是【1】. int x=240,y=15,b; char z='A'; b=(( x && y ) && ( z < 'a' )); 答案: 1). 1 第8题(1.0分) 当a=3,b=2,c=1;时,执行以下程序段后 a=【1】. if(a>b) a=b; if(b>c) b=c; else c=b; c=a;答案: 1). 2 第9题(1.0分) 以下程序的输出结果为【1】, #include "stdio.h" main(){int a;for(a=0;a<10;a++);printf("%d",a);} 答案: 1). 10 第10题(1.0分) 程序段int k=10; while(k=0) k=k-1循环体 语句执行【1】次. 答案: 1). 0 第11题(1.0分) 以下程序段要求从键盘输入字符,当输入字母 为'Y' 时,执行循环体,则括号内应填写【1】. ch=getchar(); while(ch ____ 'Y')/*在括号中填写*/ ch=getchar(); 答案: 1). == 第12题(1.0分) 以下do-while语句中循环体的执行次数是 【1】. a=10; b=0; do { b+=2; a-=2+b; } while (a>=0); 答案: 1). 3 第13题(1.0分) C语言中,数组元素的下标下限为【1】. 答案: 1). 0 第14题(1.0分) 如果函数不要求带回值,可用【1】来定义函数 返回值为空. 答案: 1). void 第15题(1.0分) C语言源程序的基本单位是【1】. 答案: 1). 函数 二、判断共15题(共计15分) 第1题(1.0分) a=(b=4)+(c=6) 是一个合法的赋值表达式. 答案:Y 第2题(1.0分) 在C语言中,变量必需先定义后使用 答案:Y 第3题(1.0分) 语句 printf("%f%%",1.0/3);输出为 0.333333. 答案:N

C语言主函数main的注意

# include main() { int i=50; while(i<=80) { szd-h: i += 10; if(i==80) goto szd-h cout<<"i is"<就行 第二,main 函数应该带上一个返回值int,这是出于兼容性的考虑,在前面的帖子中,有位兄弟找到了这样的一段话: 在 C 和C++ 中,不接收任何参数也不返回任何信息的函数原型为“void foo(void);”。可能正是因为这个,所以很多人都误认为如果不需要程序返回任何信息时可以把main 函数定义成void main(void) 。然而这是错误的!main 函数的返回值应该定义为int 类型,C 和C++ 标准中都是这样规定的。虽然在一些编译器中,void main 可以通过编译(如vc6),但并非所有编译器都支持void main ,因为标准中从来没有定义过void main 。g++3.2 中如果main 函数的返回值不是int 类型,就根本通不过编译。而gcc3.2 则会发出警告。所以,如果你想你的程序拥有很好的可移植性,请一定要用int main 。 有int main()后,就要加上return 0;当然,你不显示的写int 也就是说默认为int型,也要加上return 0;否则会有warning出现! 第三,标示符写错了,可能是作者的粗心所至,sxd_h,最好还是不要用这样的标示符,感觉没有什么可读性```` 第四,goto szd_h;后面要分号! 我稍微修改了一下,但是程序结构一点没变 # include using namespace std; int main() { int i=50; while(i<=80) { szd_h: i += 10; if(i==80)

main函数的参数

一、main函数的参数 我们经常用的main函数都是不带参数的。因此main 后的括号都是空括号。实际上,main函数可以带参数,这个参数可以认为是main函数的形式参数。C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为:main (argc,argv)C语言还规定argc(第一个形参)必须是整型变量,argv( 第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为: main (argc,argv) int argv; char *argv[];或写成: main (int argc,char *argv[]) 由于main函数不能被其它函数调用,因此不可能在程序内部取得实际值。那么,在何处把实参值赋予main函数的形参呢? 实际上,main函数的参数值是从操作系统命令行上获得的。当我们要运行一个可执行文件时,在DOS提示符下键入文件名,再输入实际参数即可把这些实参传送到main的形参中去。 DOS提示符下命令行的一般形式为:C:\>可执行文件名参数参数……; 但是应该特别注意的是,main 的两个形参和命令行中的参数在 位置上不是一一对应的。因为,main的形参只有二个,而命令行中的参数个数原则上未加限制。argc参数表示了命令行中参数的个数(注意:文件名本身也算一个参数),argc的值是在输入命令行时由系统按实际参数的个数自动赋予的。例如有命令行为:C:\>E6 24 BASIC dbase FORTRAN由于文件名E6 24本身也算一个参数,所以共有4个参数,因此argc取得的值为4。argv参数是字符串指针数组,其各元素值为命令行中各字符串(参数均按字符串处理)的首地址。指针数组的长度即为参数个数。数组元素初值由系统自动赋予。其表示如图6.8所示:main(int argc,char *argv){ while(argc-->1) printf("%s\n",*++argv); } 本例是显示命令行中输入的参数如果上例的可执行文件名为e24.exe,存放在A 驱动器的盘内。 因此输入的命令行为:C:\>a:e24 BASIC dBASE FORTRAN 则运行结果为: BASIC dBASE FORTRAN 该行共有4个参数,执行main时,argc的初值即为4。argv的4个元素分为4个字符串的首地址。执行while语句,每循环一次argv值减1,当argv等于1时停止循环,共循环三次,因此共可输出三个参数。在printf函数中,由于打印项*++argv是先加1再打印,故第一次打印的是argv[1]所指的字符串BASIC。第二、三次循环分别打印后二个字符串。而参数e24是文件名,不必输出。

相关主题
文本预览
相关文档 最新文档