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