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

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

用 <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);
注意最后一个参数的类型重置;  注意调用者要释放返回的存储空间, 那是用 malloc 分配的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值