c 可变参数 可变 形参 不确定

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(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 ---------- */
posted @ 2011-07-04 18:48  wangkangluo1  阅读(273)  评论(0编辑  收藏  举报