所以我们必须使用一个名为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 functionchar* 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 != ''; 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 = ''; do { *--ptr = Representation[num%base]; num /= base; }while(num != 0); return(ptr); }总结
以上是内存溢出为你收集整理的如何在C中编写自己的printf()?全部内容,希望文章能够帮你解决如何在C中编写自己的printf()?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)