C 处理可变参数函数 (二)

前面说了如何 很原始的实现可变参数的问题

http://www.cnblogs.com/niniwzw/archive/2009/11/06/1597464.html

但是,这样的方法可移植性比较的查,不同的cpu ,32 位 ,64 位可以变量对其的方法有差别。

比较好的做法是用 c内部的函数库来实现。

不废话了,贴上代码:

#include <stdlib.h> 
#include 
<stdarg.h>
#include 
<string.h>
#include 
<stdio.h>

char *vstrcat(const char *first, ...);

int main(int argc, char **argv)
{
    
char *= vstrcat("混沌""是好孩子吗""");
    printf(
"%s\n", p);
    free(p);
}

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 
= (char *)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)
         strcat(retbuf, p);
    va_end(argp);

    
return retbuf;
}
原文地址:https://www.cnblogs.com/niniwzw/p/1622767.html