vsprintf可変関数パラメータ

976 ワード

vsprintf

#include <<A href="http://baike.baidu.com/view/3373010.htm"target=_blank>stdarg.h>
char buffer[80];
int vspf(char *fmt, ...)
{
va_list argptr;
int cnt;
va_start(argptr, fmt);
cnt = vsprintf(buffer, fmt, argptr);
va_end(argptr);
return(cnt);
}
int main(void)
{
int inumber = 30;
float fnumber = 90.0;
char string[4] = "abc";
vspf("%d %f %s", inumber, fnumber, string);
printf("%s
", buffer); return 0; }

このプログラムの結果は
30 90.000000 abc
VA_LISTの使い方(VA_LISTはC言語で変参問題を解決するマクロのセット):
(1)まず関数にVA_を定義する.パラメータを指すポインタであるLIST型の変数
(2)そしてVA_STARTマクロ初期化変数定義されたVA_LIST変数、このマクロの2番目
パラメータは、最初の可変パラメータの前のパラメータであり、固定されたパラメータです.(例えば、VA_STARTを実行中
(ap,v)以降、apはスタックの最初の可変パラメータのアドレスを指す.)
(3)そしてVA_ARGは可変パラメータを返し、VA_ARGの2番目のパラメータは、あなたが返すパラメータのタイプです.
(4)最後にVA_を使うENDマクロは、可変パラメータの取得を終了する.関数で2番目のパラメータを使用することができます.
関数に複数の可変パラメータがある場合は、順にVA_を呼び出すARGは各パラメータを取得する.