C printf durch write ersetzen

MR34L

Cadet 4th Year
Dabei seit
Apr. 2008
Beiträge
107
Code:
void print3( char a, uint8_t b, int8_t c )
{
   printf("%c %d %d\n", a, b, c);
}

void write3( char a, uint8_t b, int8_t c )
{
    /* CODE */
}
Hey Leute ich hab da ein Problem und zwar folgendes:

write3 soll, das gleiche machen wie print3.
Nur anstelle von printf den Syscall write verwenden. Funktionen aus der sprintf-Familie dürfen nicht verwendet werden.

Meine Idee war erst b und c zu char* kovertieren, und dann aus den 3 Variablen nen
neuen char* zu bauen welcher dann durch '\0' terminiert wird.

Aber ich scheiter schon am konvertieren. Hab es mit itoa versucht, aber
da kommt dann:

asst2.c:19: warning: implicit declaration of function ‘itoa’

obwohl ich die header eingebunden habe (stdlib.h)?!
Hat vll jmd paar Tipps? Ist der Ansatz überhaupt korrekt?

Danke schonmal :)
 

XunnD

Lieutenant
Dabei seit
März 2006
Beiträge
728
Man kann die Ausgabe auch ohne fremde/bekannte Bibliotheksfunktionen realisieren.
Tipp: char-Puffer, Modulus, Division und eine Schleife.
 

7H3 N4C3R

Lt. Commander
Dabei seit
Feb. 2002
Beiträge
1.816
itoa ist keine Funktion, die der C-Standard definiert.

XunnD hat im Prinzip schon gesagt was zu tun ist, wenn man es zu Fuß machen will. Die Größe des Char-Buffers bekommst du, wenn du (von dem Wert den Logarithmus zur Basis 10) + 1 nimmst + ein zusätzlicher Char für die terminierende 0. Andererseits hat ein 32-Bit-Integer max. 11 Zeichen (negatives Vorzeichen nicht vergessen) (+ terminierende 0) - ein statisches CharArray wäre dann auch in Ordnung, sofern du deine Annahme dokumentierst.
 
Zuletzt bearbeitet:

MR34L

Cadet 4th Year
Ersteller dieses Themas
Dabei seit
Apr. 2008
Beiträge
107
Dankeschön ;)
Da man mit dem oben beschrieben Verfahren ja nur Ziffern zwischen 0-9 konvertieren muss,
braucht man itoa nicht, hab im Netz dann n kleinen Trick gefunden.

Code:
int toConvert = 7;
char number = (char) (toConvert + 48);
 
Top