c 可变参数 :gcc -g -Wall -O0 fuck.c -o fuck
#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(p);
return NULL; /* 出錯 */
(void)strcat(retbuf, p);
} int
main ( )
{ char *str = vstrcat("Hello, ", "world!", "123", "wo");
printf ("%s\n", str); return 0;
} /* ---------- end of function main ---------- */
#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;} int
main ( )
{ char *str = vstrcat("Hello, ", "world!", "123", "wo");
printf ("%s\n", str); return 0;
} /* ---------- end of function main ---------- */