C语言命令行参数

C语言命令行参数,第1张

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

{

.....

}

argc: 代表启动程序时,命令行参数的个数。C和C++语言规定,可执行程序程序本身的文件名,也算是一个命令行参数,因此,argc的值至少是1.

argv[]:指针数组,其中的每个元素都是一个char* 类型的指针,该指针指向一个字符串,这个字符串里就存放着命令行参数。

例如,argv[0]指向的字符串就是第一个命令行参数,即可执行程序的文件名,argv[1]指向第二个命令行参数,argv[2]指向第三个命令行参数....。

#include <stdio.h>

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

{

int i

for ( i = 0i <argci++)

{

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

}

return 0

}

windows下,将上面的程序编译成sample.exe,然后在控制台窗口敲:

sample para1 para2 s.txt 5 "hello world"

上面有6个参数,双引号为了包含空格作为一个参数。

输出结果:

sample

para1

para2

s.txt

5

hello world

扩展资料:

main函数通常含有参数argc和argv,写法通常如下:

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

int main(int argc,char **argv)

程序:

#include<stdio.h>

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

{

int i

for(i=0i<argci++)

printf("第 %d 个参数是 %s\n",i+1,argv[i])

return 0

}

如何写可变参数的C函数以及这些可变参数的函数编译器是如何实现的呢?下面是我为大家整理的关于c语言的参数介绍及使用,希望可以帮到大家哦。

简单的可变参数的C函数

下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的C函数要在程序中用到以下这些宏:

void va_start( va_list arg_ptr, prev_param )

type va_arg( va_list arg_ptr, type )

void va_end( va_list arg_ptr )

va在这里是variable-argument(可变参数)的意思.

这些宏定义在stdarg.h中,所以用到可变参数的程序应该包含这个头文件.下面我们写一个简单的可变参数的函数,改函数至少有一个整数参数,第二个参数也是整数,是可选的.函数只是打印这两个参数的值.

void simple_va_fun(int i, ...)

{

va_list arg_ptr

int j=0

va_start(arg_ptr, i)

j=va_arg(arg_ptr, int)

va_end(arg_ptr)

printf(%d %dn, i, j)

return

}

我们可以在我们的头文件中这样声明我们的函数:

extern void simple_va_fun(int i, ...)

我们在程序中可以这样调用:

simple_va_fun(100)

simple_va_fun(100,200)

从这个函数的实现可以看到,我们使用可变参数应该有以下步骤:

1)首先在函数里定义一个va_list型的变量,这里是arg_ptr,这个变量是指向参数的指针.

2)然后用va_start宏初始化变量arg_ptr,这个宏的第二个参数是第一个可变参数的前一个参数,是一个固定的参数.

3)然后用va_arg返回可变的参数,并赋值给整数j. va_arg的第二个参数是你要返回的参数的类型,这里是int型.

4)最后用va_end宏结束可变参数的获取.然后你就可以在函数里使用第二个参数了.如果函数有多个可变参数的,依次调用va_arg获取各个参数.

如果我们用下面三种 方法 调用的话,都是合法的,但结果却不一样:

1)simple_va_fun(100)

结果是:100 -123456789(会变的值)

2)simple_va_fun(100,200)

结果是:100 200

3)simple_va_fun(100,200,300)

结果是:100 200

我们看到第一种调用有错误,第二种调用正确,第三种调用尽管结果正确,但和我们函数最初的设计有冲突.下面一节我们探讨出现这些结果的原因和可变参数在编译器中是如何处理的.

可变参数在编译器中的处理

我们知道va_start,va_arg,va_end是在stdarg.h中被定义成宏的,由于1)硬件平台的不同 2)编译器的不同,所以定义的宏也有所不同,下

面以VC++中stdarg.h里x86平台的宏定义摘录如下(''号表示折行):

typedef char * va_list

#define _INTSIZEOF(n)

((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )

#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )

#define va_arg(ap,t)

( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/11531476.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-16
下一篇2023-05-16

发表评论

登录后才能评论

评论列表(0条)

    保存