怎样写一个有可变参数的函数?

本文介绍了一个使用可变参数的C语言函数示例,该函数可以将任意数量的字符串连接起来并存放在通过malloc获得的内存中。文章详细解释了如何使用va_list、va_start、va_arg和va_end来处理可变参数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

怎样写一个有可变参数的函数?

用<stdarg.h> 提供的辅助设施。

下面是一个把任意个字符串连接起来的函数, 结果存在malloc 的内存中:

#include  <stdlib.h>
/*  说明 malloc,  NULL,  size_t  */
#include  <stdarg.h>
/*  说明 va_  相关类型和函数 */
#include  <string.h>
/*  说明 strcat  等 */
char  *vstrcat(const  char  *first,  ...)
{
	size_t  len;
	char  *retbuf;
	va_list  argp;
	char  *p;
	if(first  ==  NULL)
		return  NULL;
	len  =  strlen(first);
	va_start(argp,  first);
	while((p  =  va_arg(argp,  char  *))  !=  NULL)
		len  +=  strlen(p);
	va_end(argp);
	retbuf  =  malloc(len  +  1);     /*  +1  包含终止符 \0  */
	if(retbuf  ==  NULL)
		return  NULL;
	/*  出错 */
	(void)strcpy(retbuf,  first);
	va_start(argp,  first);
	/*  重新开始扫描 */
	while((p  =  va_arg(argp,  char  *))  !=  NULL)
		(void)strcat(retbuf,  p);
	va_end(argp);
	return  retbuf;
}


调用如下:
char  *str  =  vstrcat("Hello,  ",  "world!",  (char  *)NULL);
注意最后一个参数的类型重置; 参见问题5.2, 15.3。注意调用者要释放返回的存储空间, 那是用malloc 分配的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值