bh7ni 发表于 2024-10-30 15:12:37

菜鸟刚使用 8H8K64U串口发数据到串口屏,求snprintf,sprintf,printf函数代码

使用STC8H8K64U的串口控制串口屏

bkeuqoaq 发表于 2024-10-30 15:47:57

这都是库函数,没有源码,printf函数很复杂的

bh7ni 发表于 2024-10-30 15:53:36

bkeuqoaq 发表于 2024-10-30 15:47
这都是库函数,没有源码,printf函数很复杂的

那我想在STC8H8K64U里面使用这些函数,该如何使用呢

DebugLab 发表于 2024-10-30 16:01:16

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598



void Uart_Printf(unsigned char *v,...)
{
      va_list ap;
      va_start(ap,v);
      while(Uart_Send_Lenth);
      UART_Send(vsprintf(T_Buffer,v,ap));
      va_end(ap);
}

bh7ni 发表于 2024-10-30 16:20:33

DebugLab 发表于 2024-10-30 16:01
https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4598




我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);

您的这个范例程序是否可以发变量呢

DebugLab 发表于 2024-10-30 16:22:29

bh7ni 发表于 2024-10-30 16:20
我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);

您的这个范例程序是否可以发 ...

可以

bkeuqoaq 发表于 2024-10-30 16:45:37

bh7ni 发表于 2024-10-30 16:20
我是想通过串口发送变量给串口屏,比如printf("n0.val=%d\xff\xff\xff",a);

您的这个范例程序是否可以发 ...

printf会调用putchar函数,修改这个函数即可,

bh7ni 发表于 2024-10-30 20:15:04

bkeuqoaq 发表于 2024-10-30 16:45
printf会调用putchar函数,修改这个函数即可,

请教是如何修改呢,

hsrzq 发表于 2024-10-31 10:54:20

bh7ni 发表于 2024-10-30 20:15
请教是如何修改呢,

int putchar(int ch) {
    while(TI);
    SBUF = ch;
    return ch;
}
其它的按串口正常配置初始化就行了

远行的鹿 发表于 2024-10-31 11:03:51

如果只是对接,对接putchar就可以。这里给出这几个函数的写法,虽然不是标准stdio实现,但还是有参考价值的。#include <stdio.h>
#include <dlfcn.h>
#include <string.h>
#include <stdlib.h>
#include <stdarg.h>
#include <ctype.h>

int new_vprintf(const char *vformat, va_list varg, ...);
int new_vfprintf(FILE *file, const char *vfformat, va_list vfarg, ...);
int new_vsprintf(char *str, const char *vsformat, va_list vsarg, ...);
int new_vsnprintf(char *snstr, size_t size, const char *vsnformat, va_list vsnfarg, ...);
int findNumber(char *num_array);
//static int (*orig_puts)(const char *put) = NULL;
static int (*orig_printf)(const char *format, ...) = NULL;
static int (*orig_fprintf)(FILE *file,const char *format, ...) = NULL;
static int (*orig_sprintf)(char * str,const char *format, ...) = NULL;
static int (*orig_snprintf)(char * str,size_t size,const char *format, ...) = NULL;
char *n="%n";
char *x25="\x25";
char *str_to_print;
//char * removeAlln(const char * buf);

int printf (const char *format, ...)
{
        //variables
        int i=0;
        int out_int;
        int *out_n;
        //char temp;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char * str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        int count=0;
        va_list argp;
        va_start(argp, format);

        for (i=0;format!='\0';)
        {
                if (format=='%')
                {       
                        //
                        i=i+1;
                        while (format=='0'||format=='1'||format=='2'||format=='3'||format=='4'||format=='5'||format=='6'||format=='7'||format=='8'||format=='9'||format=='$'||format=='*'||format=='.')
                        //while (!isalpha(format))
                        {
                                if (format=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=format;
                                        i=i+1;                                       
                                }       
                        }
                        //number=findNumber(number_array);
                        //
                        if (format=='d')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%d",out_int);
                                i=i+1;                        //
                        }
                        else if (format=='i')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%i",out_int);
                                i=i+1;                        //
                        }
                        else if (format=='s')
                        {
                                out_string=va_arg(argp, char*);
                                count=count+strlen(out_string);
                                (orig_printf)("%s",out_string);
                                i=i+1;                        //
                        }
                        else if (format=='c')
                        {
                                out_char=va_arg(argp, int);
                                count++;
                                (orig_printf)("%c",out_char);
                                i=i+1;                        //
                        }
                        else if (format=='x')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%x",out_hex_int);
                                i=i+1;                        //
                        }
                        else if (format=='X')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%X",out_hex_int);
                                i=i+1;       
                        }
                        else if (format=='f')
                        {
                                out_f=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%f",out_f);
                                i=i+1;                        //
                        }
                        else if (format=='u')
                        {
                                out_unsigned_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%u",out_unsigned_int);
                                i=i+1;                        //
                        }
                        //new
                        else if (format=='h')
                        {
                                if (format=='n')
                                {
                                        out_n=(int *)va_arg(argp,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",format);
                                        i=i+1;
                                }
                        }
                        else if (format=='e')
                        {
                                out_e=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (format=='o')
                        {
                                out_o=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (format=='p')
                        {
                                out_p=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (format=='a')
                        {
                                out_a=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (format=='n')
                        {
                                out_n=(int *)va_arg(argp,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (format=='%')
                        {
                                count++;
                                (orig_printf)("%c",format);
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        (orig_printf)("%c",format);
                        i++;
                }
        }
        va_end(argp);
        return 0;
}

int fprintf (FILE * file, const char *fmt, ...)
{
        int i=0;
        int out_int;
        int *out_n;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        int count=0;
        va_list argp;
        va_start(argp, fmt);

        for (i=0;fmt!='\0';)
        {
                if (fmt=='%')
                {
                        //
                        i=i+1;
                        while (fmt=='0'||fmt=='1'||fmt=='2'||fmt=='3'||fmt=='4'||fmt=='5'||fmt=='6'||fmt=='7'||fmt=='8'||fmt=='9'||fmt=='$'||fmt=='*'||fmt=='.')
                        //while (!isalpha(fmt))
                        {       
                                if (fmt=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=fmt;
                                        i=i+1;
                                }
                        }
                        //number=findNumber(number_array);
                        //
                        if (fmt=='d')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%d",out_int);
                                i=i+1;                        //
                        }
                        else if (fmt=='i')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%i",out_int);
                                i=i+1;                        //
                        }
                        else if (fmt=='s')
                        {
                                out_string=va_arg(argp, char*);
                                count=count+strlen(out_string);
                                (orig_fprintf)(file,"%s",out_string);
                                i=i+1;                        //
                        }
                        else if (fmt=='c')
                        {
                                out_char=va_arg(argp, int);
                                count++;
                                (orig_fprintf)(file,"%c",out_char);
                                i=i+1;                        //
                        }
                        else if (fmt=='x')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%x",out_hex_int);
                                i=i+1;                        //
                        }
                        else if (fmt=='X')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%X",out_hex_int);
                                i=i+1;                        //
                        }
                        else if (fmt=='f')
                        {
                                out_f=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%f",out_f);
                                i=i+1;                        //
                        }
                        else if (fmt=='u')
                        {
                                out_unsigned_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%u",out_unsigned_int);
                                i=i+1;                        //
                        }
                        //new
                        else if (fmt=='h')
                        {
                                if (fmt=='n')
                                {
                                        out_n=(int *)va_arg(argp,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",fmt);
                                        i=i+1;
                                }
                        }
                        else if (fmt=='e')
                        {
                                out_e=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (fmt=='o')
                        {
                                out_o=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (fmt=='p')
                        {
                                out_p=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (fmt=='a')
                        {
                                out_a=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (fmt=='n')
                        {
                                out_n=(int *)va_arg(argp,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (fmt=='%')
                        {
                                count++;
                                (orig_fprintf)(file,"%c",fmt);
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        (orig_fprintf)(file,"%c",fmt);
                        i++;
                }
        }
        va_end(argp);
        return 0;
}

int sprintf (char *str, const char *sformat, ...)
{
        int i=0;
        int out_int;
        int *out_n;
        int len;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        char final_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        int count=0;
        va_list argp;
        va_start(argp, sformat);

        for (i=0;sformat!='\0';)
        {
                if (sformat=='%')
                {
                        //
                        i=i+1;
                        while (sformat=='0'||sformat=='1'||sformat=='2'||sformat=='3'||sformat=='4'||sformat=='5'||sformat=='6'||sformat=='7'||sformat=='8'||sformat=='9'||sformat=='$'||sformat=='*'||sformat=='.')
                        //while (!isalpha(sformat))
                        {       
                                if (sformat=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=sformat;
                                        i=i+1;
                                }
                        }
                        //number=findNumber(number_array);
                        //
                        if (sformat=='d')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (sformat=='i')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;
                        }
                        else if (sformat=='s')
                        {
                                out_string=va_arg(argp, char*);
                                count=count+strlen(out_string);
                                strcat(final_string,out_string);
                                i=i+1;                        //
                        }
                        else if (sformat=='c')
                        {
                                out_char=va_arg(argp, int);
                                count++;
                                len=strlen(final_string);
                                final_string=out_char;
                                i=i+1;                        //
                        }
                        else if (sformat=='x')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (sformat=='X')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;               
                        }
                        else if (sformat=='f')
                        {
                                out_f=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (sformat=='u')
                        {
                                out_unsigned_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        //new
                        else if (sformat=='h')
                        {
                                if (sformat=='n')
                                {
                                        out_n=(int *)va_arg(argp,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",sformat);
                                        i=i+1;
                                }
                        }
                        else if (sformat=='e')
                        {
                                out_e=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (sformat=='o')
                        {
                                out_o=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (sformat=='p')
                        {
                                out_p=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (sformat=='a')
                        {
                                out_a=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (sformat=='n')
                        {
                                out_n=(int *)va_arg(argp,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (sformat=='%')
                        {
                                count++;
                                len=strlen(final_string);
                                final_string=sformat;
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        len=strlen(final_string);
                        final_string=sformat;
                        i++;
                }
        }
        (orig_sprintf)(str,"%s",final_string);
        va_end(argp);
        return 0;
}

int snprintf(char *snstr, size_t size, const char * snformat, ...)
{
        int i=0;
        int out_int;
        int *out_n;
        int len;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        char final_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        orig_snprintf=(int (*)(char *str,size_t size,const char *format, ...))dlsym(RTLD_NEXT,"snprintf");
        int count=0;
        va_list argp;
        va_start(argp, snformat);

        for (i=0;snformat!='\0';)
        {
                if (snformat=='%')
                {
                        //
                        i=i+1;
                        while (snformat=='0'||snformat=='1'||snformat=='2'||snformat=='3'||snformat=='4'||snformat=='5'||snformat=='6'||snformat=='7'||snformat=='8'||snformat=='9'||snformat=='$'||snformat=='*'||snformat=='.')
                        //while (!isalpha(snformat))
                        {       
                                if (snformat=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=snformat;
                                        i=i+1;
                                }
                        }
                        //number=findNumber(number_array);
                        //
                        if (snformat=='d')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (snformat=='i')
                        {
                                out_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;               
                        }
                        else if (snformat=='s')
                        {
                                out_string=va_arg(argp, char*);
                                count=count+strlen(out_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (snformat=='c')
                        {
                                out_char=va_arg(argp, int);
                                count++;
                                len=strlen(final_string);
                                final_string=out_char;
                                i=i+1;                        //
                        }
                        else if (snformat=='x')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (snformat=='X')
                        {
                                out_hex_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;               
                        }
                        else if (snformat=='f')
                        {
                                out_f=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (snformat=='u')
                        {
                                out_unsigned_int=va_arg(argp, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        //new
                        else if (snformat=='h')
                        {
                                if (snformat=='n')
                                {
                                        out_n=(int *)va_arg(argp,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",snformat);
                                        i=i+1;
                                }
                        }
                        else if (snformat=='e')
                        {
                                out_e=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (snformat=='o')
                        {
                                out_o=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (snformat=='p')
                        {
                                out_p=va_arg(argp, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (snformat=='a')
                        {
                                out_a=va_arg(argp,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (snformat=='n')
                        {
                                out_n=(int *)va_arg(argp,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (snformat=='%')
                        {
                                count++;
                                len=strlen(final_string);
                                final_string=snformat;
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        len=strlen(final_string);
                        final_string=snformat;
                        i++;
                }
        }
        (orig_snprintf)(snstr,size,"%s",final_string);
        //(orig_snprintf)(snstr,size,final_string);
        va_end(argp);
        return 0;
}

int vprintf (const char *format, va_list arg)
{
        new_vprintf(format,arg);
        return 0;
}

int vfprintf(FILE *file, const char *format, va_list arg)
{
        new_vfprintf(file, format, arg);
        return 0;
}

int new_vprintf(const char *vformat, va_list varg, ...)
{
        int i=0;
        int out_int;
        int *out_n;
        //char temp;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char * str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        int count=0;
       
        for (i=0;vformat!='\0';)
        {
                if (vformat=='%')
                {
                        //
                        i=i+1;
                        while (vformat=='0'||vformat=='1'||vformat=='2'||vformat=='3'||vformat=='4'||vformat=='5'||vformat=='6'||vformat=='7'||vformat=='8'||vformat=='9'||vformat=='$'||vformat=='*'||vformat=='.')
                        //while (!isalpha(vformat))
                        {       
                                if (vformat=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=vformat;
                                        i=i+1;                                       
                                }
                        }
                        //number=findNumber(number_array);
                        //
                        if (vformat=='d')
                        {
                                out_int=va_arg(varg, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%d",out_int);
                                i=i+1;                        //
                        }
                        else if (vformat=='i')
                        {
                                out_int=va_arg(varg, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%i",out_int);
                                i=i+1;                       
                        }
                        else if (vformat=='s')
                        {
                                out_string=va_arg(varg, char*);
                                count=count+strlen(out_string);
                                (orig_printf)("%s",out_string);
                                i=i+1;                        //
                        }
                        else if (vformat=='c')
                        {
                                out_char=va_arg(varg, int);
                                count++;
                                (orig_printf)("%c",out_char);
                                i=i+1;                        //
                        }
                        else if (vformat=='x')
                        {
                                out_hex_int=va_arg(varg, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%x",out_hex_int);
                                i=i+1;                        //
                        }
                        else if (vformat=='X')
                        {
                                out_hex_int=va_arg(varg, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%X",out_hex_int);
                                i=i+1;       
                        }
                        else if (vformat=='f')
                        {
                                out_f=va_arg(varg,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%f",out_f);
                                i=i+1;                        //
                        }
                        else if (vformat=='u')
                        {
                                out_unsigned_int=va_arg(varg, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%u",out_unsigned_int);
                                i=i+1;                        //
                        }
                        //new
                        else if (vformat=='h')
                        {
                                if (vformat=='n')
                                {
                                        out_n=(int *)va_arg(varg,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",vformat);
                                        i=i+1;
                                }
                        }
                        else if (vformat=='e')
                        {
                                out_e=va_arg(varg,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (vformat=='o')
                        {
                                out_o=va_arg(varg, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (vformat=='p')
                        {
                                out_p=va_arg(varg, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (vformat=='a')
                        {
                                out_a=va_arg(varg,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (vformat=='n')
                        {
                                out_n=(int *)va_arg(varg,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (vformat=='%')
                        {
                                count++;
                                (orig_printf)("%c",vformat);
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        (orig_printf)("%c",vformat);
                        i++;
                }
        }

        return 0;
}

int new_vfprintf(FILE *file, const char *vfformat, va_list vfarg, ...)
{
        int i=0;
        int out_int;
        int *out_n;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        int count=0;

        for (i=0;vfformat!='\0';)
        {
                if (vfformat=='%')
                {
                        //
                        i=i+1;
                        while (vfformat=='0'||vfformat=='1'||vfformat=='2'||vfformat=='3'||vfformat=='4'||vfformat=='5'||vfformat=='6'||vfformat=='7'||vfformat=='8'||vfformat=='9'||vfformat=='$'||vfformat=='*'||vfformat=='.')
                        //while (!isalpha(vfformat))
                        {       
                                if (vfformat=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=vfformat;
                                        i=i+1;
                                }
                        }
                        //number=findNumber(number_array);
                        //
                        if (vfformat=='d')
                        {
                                out_int=va_arg(vfarg, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%d",out_int);
                                i=i+1;                        //
                        }
                        else if (vfformat=='i')
                        {
                                out_int=va_arg(vfarg, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%i",out_int);
                                i=i+1;                        //       
                        }
                        else if (vfformat=='s')
                        {
                                out_string=va_arg(vfarg, char*);
                                count=count+strlen(out_string);
                                (orig_fprintf)(file,"%s",out_string);
                                i=i+1;                        //
                        }
                        else if (vfformat=='c')
                        {
                                out_char=va_arg(vfarg, int);
                                count++;
                                (orig_fprintf)(file,"%c",out_char);
                                i=i+1;                        //
                        }
                        else if (vfformat=='x')
                        {
                                out_hex_int=va_arg(vfarg, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%x",out_hex_int);
                                i=i+1;                        //
                        }
                        else if (vfformat=='X')
                        {
                                out_hex_int=va_arg(vfarg, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%X",out_hex_int);
                                i=i+1;       
                        }
                        else if (vfformat=='f')
                        {
                                out_f=va_arg(vfarg,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%f",out_f);
                                i=i+1;                        //
                        }
                        else if (vfformat=='u')
                        {
                                out_unsigned_int=va_arg(vfarg, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                (orig_fprintf)(file,"%u",out_unsigned_int);
                                i=i+1;                        //
                        }
                        //new
                        else if (vfformat=='h')
                        {
                                if (vfformat=='n')
                                {
                                        out_n=(int *)va_arg(vfarg,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",vfformat);
                                        i=i+1;
                                }
                        }
                        else if (vfformat=='e')
                        {
                                out_e=va_arg(vfarg,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (vfformat=='o')
                        {
                                out_o=va_arg(vfarg, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (vfformat=='p')
                        {
                                out_p=va_arg(vfarg, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (vfformat=='a')
                        {
                                out_a=va_arg(vfarg,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (vfformat=='n')
                        {
                                out_n=(int *)va_arg(vfarg,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (vfformat=='%')
                        {
                                count++;
                                (orig_fprintf)(file,"%c",vfformat);
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        (orig_fprintf)(file,"%c",vfformat);
                        i++;
                }
        }
        return 0;
}

int vsprintf(char *str, const char * format, va_list arg)
{
        new_vsprintf(str,format,arg);
        return 0;
}

int new_vsprintf(char *str, const char *vsformat, va_list vsarg, ...)
{
        int i=0;
        int out_int;
        int *out_n;
        int len;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        char final_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        int count=0;

        for (i=0;vsformat!='\0';)
        {
                if (vsformat=='%')
                {
                        //
                        i=i+1;
                        while (vsformat=='0'||vsformat=='1'||vsformat=='2'||vsformat=='3'||vsformat=='4'||vsformat=='5'||vsformat=='6'||vsformat=='7'||vsformat=='8'||vsformat=='9'||vsformat=='$'||vsformat=='*'||vsformat=='.')
                        //while (!isalpha(vsformat))
                        {       
                                if (vsformat=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=vsformat;
                                        i=i+1;                               
                                }
                        }
                        //number=findNumber(number_array);
                        //
                        if (vsformat=='d')
                        {
                                out_int=va_arg(vsarg, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsformat=='i')
                        {
                                out_int=va_arg(vsarg, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsformat=='s')
                        {
                                out_string=va_arg(vsarg, char*);
                                count=count+strlen(out_string);
                                strcat(final_string,out_string);
                                i=i+1;                        //
                        }
                        else if (vsformat=='c')
                        {
                                out_char=va_arg(vsarg, int);
                                count++;
                                len=strlen(final_string);
                                final_string=out_char;
                                i=i+1;                        //
                        }
                        else if (vsformat=='x')
                        {
                                out_hex_int=va_arg(vsarg, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsformat=='X')
                        {
                                out_hex_int=va_arg(vsarg, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;
                        }
                        else if (vsformat=='f')
                        {
                                out_f=va_arg(vsarg,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsformat=='u')
                        {
                                out_unsigned_int=va_arg(vsarg, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        //new
                        else if (vsformat=='h')
                        {
                                if (vsformat=='n')
                                {
                                        out_n=(int *)va_arg(vsarg,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",vsformat);
                                        i=i+1;
                                }
                        }
                        else if (vsformat=='e')
                        {
                                out_e=va_arg(vsarg,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (vsformat=='o')
                        {
                                out_o=va_arg(vsarg, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (vsformat=='p')
                        {
                                out_p=va_arg(vsarg, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (vsformat=='a')
                        {
                                out_a=va_arg(vsarg,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (vsformat=='n')
                        {
                                out_n=(int *)va_arg(vsarg,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (vsformat=='%')
                        {
                                count++;
                                len=strlen(final_string);
                                final_string=vsformat;
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        len=strlen(final_string);
                        final_string=vsformat;
                        i++;
                }
        }
        (orig_sprintf)(str,"%s",final_string);

        return 0;
}

int vsnprintf(char *snstr, size_t size, const char *snformat, va_list arg)
{
        new_vsnprintf(snstr, size, snformat, arg);
        return 0;
}

int new_vsnprintf(char *snstr, size_t size, const char *vsnformat, va_list vsnfarg, ...)
{
        int i=0;
        int out_int;
        int *out_n;
        int len;
        unsigned int out_hex_int;
        unsigned int out_unsigned_int;
        char out_char=NULL;
        char *out_string=NULL;
        char int_to_string;
        char final_string;
        double out_f;
        double out_e;
        //
        double out_a;
        unsigned int out_o;
        unsigned int out_p;
        int k=0;
        //int circle=0;
        //int number;
        char number_array;
        //int loop;
        //
        orig_fprintf=(int (*)(FILE *file,const char *format, ...))dlsym(RTLD_NEXT,"fprintf");
        orig_printf=(int (*)(const char *format, ...))dlsym(RTLD_NEXT,"printf");
        orig_sprintf=(int (*)(char *str,const char *format, ...))dlsym(RTLD_NEXT,"sprintf");
        orig_snprintf=(int (*)(char *str,size_t size,const char *format, ...))dlsym(RTLD_NEXT,"snprintf");
        int count=0;

        for (i=0;vsnformat!='\0';)
        {
                if (vsnformat=='%')
                {
                        //
                        i=i+1;
                        while (vsnformat=='0'||vsnformat=='1'||vsnformat=='2'||vsnformat=='3'||vsnformat=='4'||vsnformat=='5'||vsnformat=='6'||vsnformat=='7'||vsnformat=='8'||vsnformat=='9'||vsnformat=='$'||vsnformat=='*'||vsnformat=='.')
                        //while (!isalpha(vsnformat))
                        {       
                                if (vsnformat=='%')
                                {
                                        break;
                                }
                                else
                                {
                                        number_array=vsnformat;
                                        i=i+1;                                       
                                }
                        }
                        //number=findNumber(number_array);
                        //
                        if (vsnformat=='d')
                        {
                                out_int=va_arg(vsnfarg, int);
                                (orig_sprintf)(int_to_string,"%d",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsnformat=='i')
                        {
                                out_int=va_arg(vsnfarg, int);
                                (orig_sprintf)(int_to_string,"%i",out_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsnformat=='s')
                        {
                                out_string=va_arg(vsnfarg, char*);
                                count=count+strlen(out_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsnformat=='c')
                        {
                                out_char=va_arg(vsnfarg, int);
                                count++;
                                len=strlen(final_string);
                                final_string=out_char;
                                i=i+1;                        //
                        }
                        else if (vsnformat=='x')
                        {
                                out_hex_int=va_arg(vsnfarg, int);
                                (orig_sprintf)(int_to_string,"%x",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsnformat=='X')
                        {
                                out_hex_int=va_arg(vsnfarg, int);
                                (orig_sprintf)(int_to_string,"%X",out_hex_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsnformat=='f')
                        {
                                out_f=va_arg(vsnfarg,double);
                                (orig_sprintf)(int_to_string,"%f",out_f);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        else if (vsnformat=='u')
                        {
                                out_unsigned_int=va_arg(vsnfarg, int);
                                (orig_sprintf)(int_to_string,"%u",out_unsigned_int);
                                count=count+strlen(int_to_string);
                                strcat(final_string,int_to_string);
                                i=i+1;                        //
                        }
                        //new
                        else if (vsnformat=='h')
                        {
                                if (vsnformat=='n')
                                {
                                        out_n=(int *)va_arg(vsnfarg,int*);
                                        //*out_n=count;
                                        i=i+2;
                                }
                                else
                                {
                                        count++;
                                        (orig_printf)("%c",vsnformat);
                                        i=i+1;
                                }
                        }
                        else if (vsnformat=='e')
                        {
                                out_e=va_arg(vsnfarg,double);
                                (orig_sprintf)(int_to_string,"%e",out_e);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%e",out_e);
                                i=i+1;       
                        }
                        else if (vsnformat=='o')
                        {
                                out_o=va_arg(vsnfarg, unsigned int);
                                (orig_sprintf)(int_to_string,"%o",out_o);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%o",out_o);
                                i=i+1;       
                        }
                        else if (vsnformat=='p')
                        {
                                out_p=va_arg(vsnfarg, unsigned int);
                                (orig_sprintf)(int_to_string,"%p",out_p);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%p",out_p);
                                i=i+1;
                        }
                        else if (vsnformat=='a')
                        {
                                out_a=va_arg(vsnfarg,double);
                                (orig_sprintf)(int_to_string,"%a",out_a);
                                count=count+strlen(int_to_string);
                                (orig_printf)("%a",out_a);
                                i=i+1;               
                        }
                        //new
                        else if (vsnformat=='n')
                        {
                                out_n=(int *)va_arg(vsnfarg,int*);
                                //*out_n=count;                                        //uncomment this for test1 and test2
                                i=i+1;
                        }
                        else if (vsnformat=='%')
                        {
                                count++;
                                len=strlen(final_string);
                                final_string=vsnformat;
                                i=i+1;
                        }
                        else
                        {
                                count++;
                                i++;
                        }
                }
                else
                {
                        count++;
                        len=strlen(final_string);
                        final_string=vsnformat;
                        i++;
                }
        }
        (orig_snprintf)(snstr,size,"%s",final_string);
        //(orig_snprintf)(snstr,size,final_string);

        return 0;
}

int findNumber(char *num_array)
{
        //int length=strlen(num_array);
        int number;
        sscanf(num_array,"%d",&number);

        return number;
}
页: [1] 2
查看完整版本: 菜鸟刚使用 8H8K64U串口发数据到串口屏,求snprintf,sprintf,printf函数代码