请问函数参数传递的有关问题,多谢
请教函数参数传递的问题,谢谢
程序test.exe如下:
int f_test(char argv2[])
{
return 0;
}
int main(int argc,char* argv[])
{
调用f_test
f_test(空格分隔的字符串, 分别作为test函数的数组参数的每个元素);
}
就像和main函数那样。比如,实际创给了argv[] 8个参数
test a bbb 100 4 555 gg
函数f_test如何实现这样的功能呢?
谢谢
------解决方案--------------------
不用分割,本身已经分割好了。
argv[i]就是一个一个的参数。
------解决方案--------------------
int main(int argc,char* argv[])
main函数不是已经给你写出来了吗?模仿main函数写就好了。
------解决方案--------------------
程序的输入参数可以通过main函数的参数列表接收,然后你就可以这些参数了。main函数第二个参数是char* 的指针数组,而你的 f_test函数是char型数组,这是个区别你得明白,f_test好像实现不了main函数的此项功能。
------解决方案--------------------
仅供参考
------解决方案--------------------
可以使用va_start和va_end宏。具体用法自己查百度。下面给个例子给你。
/*函数原型声明,至少需要一个确定的参数,注意括号内的省略号*/
int demo( char, ... );
void main( void )
{
demo("DEMO", "This", "is", "a", "demo!", "");
}
/*ANSI标准形式的声明方式,括号内的省略号表示可选参数*/
int demo( char msg, ... )
{
/*定义保存函数参数的结构*/
va_list argp;
int argno = 0;
char para;
/*argp指向传入的第一个可选参数,msg是最后一个确定的参数*/
va_start( argp, msg );
while (1)
{
para = va_arg( argp, char);
if ( strcmp( para, "") == 0 )
break;
printf("Parameter #%d is: %s\n", argno, para);
argno++;
}
va_end( argp );
/*将argp置为NULL*/
return 0;
}
------解决方案--------------------
程序test.exe如下:
int f_test(char argv2[])
{
return 0;
}
int main(int argc,char* argv[])
{
调用f_test
f_test(空格分隔的字符串, 分别作为test函数的数组参数的每个元素);
}
就像和main函数那样。比如,实际创给了argv[] 8个参数
test a bbb 100 4 555 gg
函数f_test如何实现这样的功能呢?
谢谢
------解决方案--------------------
不用分割,本身已经分割好了。
argv[i]就是一个一个的参数。
------解决方案--------------------
int main(int argc,char* argv[])
main函数不是已经给你写出来了吗?模仿main函数写就好了。
------解决方案--------------------
程序的输入参数可以通过main函数的参数列表接收,然后你就可以这些参数了。main函数第二个参数是char* 的指针数组,而你的 f_test函数是char型数组,这是个区别你得明白,f_test好像实现不了main函数的此项功能。
------解决方案--------------------
仅供参考
#include <stdio.h>
#include <string.h>
char s[]="aa,bb,cc,dd,...";
int argc,i;
char *argv[100];
void main() {
argc=0;
argv[argc]=strtok(s,",");
while (1) {
if (NULL==argv[argc]) break;
argc++;
if (argc>=100) break;
argv[argc]=strtok(NULL,",");
}
for (i=0;i<argc;i++) {
printf("argv[%d] \"%s\"\n",i,argv[i]);
}
}
//argv[0] "aa"
//argv[1] "bb"
//argv[2] "cc"
//argv[3] "dd"
//argv[4] "..."
------解决方案--------------------
可以使用va_start和va_end宏。具体用法自己查百度。下面给个例子给你。
/*函数原型声明,至少需要一个确定的参数,注意括号内的省略号*/
int demo( char, ... );
void main( void )
{
demo("DEMO", "This", "is", "a", "demo!", "");
}
/*ANSI标准形式的声明方式,括号内的省略号表示可选参数*/
int demo( char msg, ... )
{
/*定义保存函数参数的结构*/
va_list argp;
int argno = 0;
char para;
/*argp指向传入的第一个可选参数,msg是最后一个确定的参数*/
va_start( argp, msg );
while (1)
{
para = va_arg( argp, char);
if ( strcmp( para, "") == 0 )
break;
printf("Parameter #%d is: %s\n", argno, para);
argno++;
}
va_end( argp );
/*将argp置为NULL*/
return 0;
}
------解决方案--------------------
va_arg, va_end, va_start
Access variable-argument lists.
type va_arg( va_list arg_ptr, type );
void va_end( va_list arg_ptr );
void va_start( va_list arg_ptr ); (UNIX version)
void va_start( va_list arg_ptr, prev_param ); (ANSI version)
Routine Required Header Optional Headers Compatibility
va_arg <stdio.h> and <stdarg.h> <varargs.h>1 ANSI, Win 95, Win NT
va_end <stdio.h> and <stdarg.h> <varargs.h>1 ANSI, Win 95, Win NT
va_start <stdio.h> and <stdarg.h> <varargs.h>1 ANSI, Win 95, Win NT
1 Required for UNIX V compatibility.
For additional compatibility information, see Compatibility in the Introduction.
Libraries
LIBC.LIB Single thread static library, retail version
LIBCMT.LIB Multithread static library, retail version
MSVCRT.LIB Import library for MSVCRT.DLL, retail version