gpt4 book ai didi

c - 如何在 C 中编写我自己的 printf()?

转载 作者:太空狗 更新时间:2023-10-29 16:40:06 25 4
gpt4 key购买 nike

实际上,我正在尝试使用可变参数在 C 中编写自己的 printf()。但是我没有得到正确的解决方案。谁能帮帮我?

最佳答案

在执行 printf( ) 函数之前,我们必须处理不寻常的问题,即可变参数。正如我们所知,printf 除了字符串之外还可以接受许多参数。 所以我们必须使用一个名为 stdarg.h 的标准库来处理这个可变参数问题。在这个实现上下文中,我们不需要学习整个 stdarg.h 库,因为我们使用了这些库中的一些宏函数,我们的 C 程序可以直接理解这些函数。

Here is the code source which explain nice and fast

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

void Myprintf(char *,...); //Our printf function
char* convert(unsigned int, int); //Convert integer number into octal, hex, etc.


int main()
{
Myprintf(" WWW.FIRMCODES.COM \n %d", 9);

return 0;
}


void Myprintf(char* format,...)
{
char *traverse;
unsigned int i;
char *s;

//Module 1: Initializing Myprintf's arguments
va_list arg;
va_start(arg, format);

for(traverse = format; *traverse != '\0'; traverse++)
{
while( *traverse != '%' )
{
putchar(*traverse);
traverse++;
}

traverse++;

//Module 2: Fetching and executing arguments
switch(*traverse)
{
case 'c' : i = va_arg(arg,int); //Fetch char argument
putchar(i);
break;

case 'd' : i = va_arg(arg,int); //Fetch Decimal/Integer argument
if(i<0)
{
i = -i;
putchar('-');
}
puts(convert(i,10));
break;

case 'o': i = va_arg(arg,unsigned int); //Fetch Octal representation
puts(convert(i,8));
break;

case 's': s = va_arg(arg,char *); //Fetch string
puts(s);
break;

case 'x': i = va_arg(arg,unsigned int); //Fetch Hexadecimal representation
puts(convert(i,16));
break;
}
}

//Module 3: Closing argument list to necessary clean-up
va_end(arg);
}

char *convert(unsigned int num, int base)
{
static char Representation[]= "0123456789ABCDEF";
static char buffer[50];
char *ptr;

ptr = &buffer[49];
*ptr = '\0';

do
{
*--ptr = Representation[num%base];
num /= base;
}while(num != 0);

return(ptr);
}

关于c - 如何在 C 中编写我自己的 printf()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735236/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com