Własna implementacja printf

0
void Myprintf(char *,...); 
char *convert(unsigned int num, int base);
#include <string.h>
#include <stdlib.h>
#include <unistd.h>

int main() 
{ 
    Myprintf(" brtbr %d fsadf", 9); 
    return 0;
} 

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

     char * p = (((char*)&format) + sizeof(format));

    for(traverse=format; *traverse != '\0'; traverse++){

        if (*traverse == '%') {
             traverse++;
    if (*traverse == 'd') {
        arg = *((int*)p);
        p += sizeof(int);
         write(1,convert(arg,10),8);
         traverse++; 
               }        
        }
        write(1,(void *) traverse,1);
    }

}  

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); 
}

Dlaczego w miejscu gdzie powinna być 9 dostaje losowe inty?

0
     char * p = (((char*)&format) + sizeof(format));

    if (*traverse == 'd') {
        arg = *((int*)p);

To nie ma sensu, chcesz użyć VA_ARGS to użyj VA_ARGS.

Poza tym, każde wystąpienie d zamienisz na liczbę, a chyba nie o to chodziło.

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0