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

用<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 分配的。

永不止步步 发表于01-18 10:18 浏览65535次
分享到:

已有0条评论

暂时还没有回复哟,快来抢沙发吧

添加一条新评论

只有登录用户才能评论,请先登录注册哦!

话题作者

永不止步步
金币:67410个|学分:345377个
立即注册
畅学电子网,带你进入电子开发学习世界
专业电子工程技术学习交流社区,加入畅学一起充电加油吧!

x

畅学电子网订阅号