怎样写一个有可变参数的函数?
来源:学生作业帮助网 编辑:作业帮 时间:2024/07/01 04:52:56
![怎样写一个有可变参数的函数?](/uploads/image/z/12084753-57-3.jpg?t=%E6%80%8E%E6%A0%B7%E5%86%99%E4%B8%80%E4%B8%AA%E6%9C%89%E5%8F%AF%E5%8F%98%E5%8F%82%E6%95%B0%E7%9A%84%E5%87%BD%E6%95%B0%3F)
怎样写一个有可变参数的函数?
怎样写一个有可变参数的函数?
怎样写一个有可变参数的函数?
用 提供的辅助设施.
下面是一个把任意个字符串连接起来的函数, 结果存在 malloc 的内存中:
#include /* 说明 malloc, NULL, size_t */
#include /* 说明 va_ 相关类型和函数 */
#include /* 说明 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);