利用可变参实现fprintf函数

简介:
#include <stdio.h>
#include <stdarg.h>
/* 
可变参相关接口 
typedef char * va_list ; 
void va_start (va_list ap , prev_param) ;
type va_arg(va_list ap , type) ;
void va_end(va_list ap); 
*/
int myfprintf(FILE* fp, char* fmt, ...)
{
     int ret = 0; 
     va_list args;  //va_list是一个字符串指针,用于获取不确定个数的参数 
     va_start(args,fmt); //读取可变参数的过程其实就是在堆栈中,使用指针,遍历堆栈段中
	 //的参数列表,从低地址到高地址一个一个的把参数内容读出来的过程 
	 
	 //该函数会根据参数fmt字符串来转换格式并格式化数据,然后将结果输出到参数Stream指定的文件中
	 //直到出现字符串结束的\0为止。 
     ret = vfprintf(fp, fmt, args);
     //获取完所有参数之后,为了避免发生程序瘫痪,需要将 ap指针关闭,其实这个函数相当于将args设置为NULL 
     va_end(args);
     return ret;
}

int main(void)
{
	myfprintf(stdout,"hello world\n");
	return 0 ;
}

运行结果:


目录
相关文章
|
4月前
|
算法 编译器
函数(2)
函数(2)
26 0
|
6月前
|
程序员
函数
一、函数 函数是一段封装了特定功能的可重复使用的代码块。它接受输入参数,执行特定的操作,并返回一个结果。函数可以在程序中被多次调用,避免了重复编写相同的代码,提高了代码的复用性和可维护性。 函数通常具有以下几个特点: 1. 输入参数:函数可以接受零个或多个输入参数,用于传递数据给函数。输入参数可以是任意类型的数据,如整数、浮点数、字符串、数组等。函数可以使用输入参数来执行特定的操作。 2. 函数体:函数体是函数的核心部分,包含了函数要执行的操作。函数体是由一系列的语句组成的代码块,可以包含各种控制语句、变量声明、表达式等。函数体定义了函数的具体功能。 3. 返回值:函数可以返回一个结果给调用者
33 0
|
7月前
MQTTClient_setCallbacks()函数
MQTTClient_setCallbacks()
459 0
|
10月前
实现strcta函数
实现strcta函数
|
12月前
|
自然语言处理 C++
C/C++ 中的 atol()、atoll() 和 atof() 函数
1.atol(): 此函数将作为参数传递给函数调用的 C 类型字符串转换为长整数。它解析 C 字符串 str 并将其内容解释为整数,该整数作为 long int 类型的值返回。该函数会丢弃字符串开头的空白字符,直到找到非空白字符。如果 C 字符串 str 中的非空白字符序列不是有效的整数,或者如果因为 str 为空或仅包含空白字符而不存在这样的序列,则不执行任何转换并返回零。
142 0
|
程序员 编译器 开发者
函数(1)
函数(1)
90 0
函数(1)
|
编译器 C语言 C++
C++——函数
C++——函数
C++——函数
fflush函数
fflush函数
137 0