Creating your own printf() in C

  • Thread starter Thread starter Tony11235
  • Start date Start date
Click For Summary
SUMMARY

This discussion focuses on creating custom output functions in C, specifically implementing printint(), printstring(), and printhex() as part of a simplified version of printf(). The provided code snippet demonstrates the use of variable arguments with stdarg.h and outlines the need for a proper implementation of printhex(). A suggested implementation for printhex() is provided, utilizing bitwise operations to convert integers to hexadecimal format.

PREREQUISITES
  • Understanding of C programming language syntax and structure
  • Familiarity with variable argument lists using stdarg.h
  • Basic knowledge of bitwise operations and integer manipulation
  • Experience with function implementation in C
NEXT STEPS
  • Implement the printhex() function using the suggested bitwise approach
  • Explore the standard printf() implementation for deeper insights
  • Learn about memory management in C, especially for embedded systems like MSP430
  • Investigate the putchar() function and its role in character output
USEFUL FOR

C programmers, especially those working on embedded systems or learning to implement custom library routines, will benefit from this discussion.

Tony11235
Messages
254
Reaction score
0
Given this code, I was to finish it by creating the printint(), printstring(), and printhex() functions. I wasn't able to finish the printhex(). And the printint() might not even be right. I know java, but I'm fairly new to C. Could anyone show me what the printhex() should be?

#include <stdarg.h>

extern int printchar(int);

void myprintf(const char *fmt, ...);
{
const char *p;
va_list argp;
int i;
char *s;
char fmtbuf[256];

va_start(argp, fmt);

for(p + fmt; *p != '\0'; p++)
{
if(*p != '%')
{
putchar(*p);
continue;
}

switch(*++p)
{
case 'c':
i = va_arg(argp, int);
putchar(i);
break;

case 'd':
i = va_arg(argp, int);
printint(i);
break;

case 's':
s = va_arg(argp, char *);
printstring(s);
break;

case 'x':
i = va_arg(argp, int);
printhex(i);
break;

case '%':
putchar('%');
break;
}
}

va_end(argp);
}

void printint(int i)
{
int digit;
digit = i % 10;
digit = digit + '0';
i = i / 10;
putchar(i);
}

void printstring(char s)
{
putchar(s);
}

void printhex(int i)
{
}
 
Computer science news on Phys.org
Last edited:
dduardo said:
Why are you creating your own printf function? Don't try to reinvent the wheel.

For the hex you'll basically want to do this:

for (int a=2*sizeof(int) - 1; a>=0; a--) {
putchar("0123456789ABCDEF"[((i >> a*4) & 0xF)]);
}

[edit] Look at a printf source if you like:

http://cvs.opensolaris.org/source/xref/usr/src/uts/common/os/printf.c

The standard c libraries require memory that msp430, the processor for this little toyish robot were going to be programming in lab, does not have. So I guess our professor is just having us practice writing library routines.
 

Similar threads

  • · Replies 2 ·
Replies
2
Views
2K
  • · Replies 4 ·
Replies
4
Views
2K
  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 17 ·
Replies
17
Views
2K
Replies
89
Views
7K
  • · Replies 23 ·
Replies
23
Views
2K
  • · Replies 36 ·
2
Replies
36
Views
3K
  • · Replies 14 ·
Replies
14
Views
3K
  • · Replies 13 ·
Replies
13
Views
7K
  • · Replies 5 ·
Replies
5
Views
3K