eigenes printf --> funktioniert nur mit args

Gast #1727026
Lesenswert?
• ▲
▼
Hallo
ich habe eine vorhandene printf routine portiert um die ausgaben meines 
UARTS in printf style zu benutzen...
ich fuehre meine testroutine aus und das meiste funktioniert:
was nicht geht ist, wenn kein 2. argument im aufruf ist:
printf("%s\n\n", ptr);        --> funktioniert
printf("kleiner test\n",0);   --> funktioniert aber 0 sinnlos
printf("kleiner test2\n");    --> keine ausgabe
jemand ne idee?

thx
Angehängte Dateien:
#1727033
Lesenswert?
• ▲
▼
Das hier
1
/* assuming sizeof(void *) == sizeof(int) */
2

3
int printf(const char *format, ...)
4
{
5
  register int *varg = (int *)(&format);
6
  return print(0, varg);
7
}
kommt mir dann doch sehr brutal vor.

Das hätte ich so nicht erwartet.

Was mich stutzig macht. Du arbeitest mit variadischen Funktionen, in 
deinem ganzen Code kommt aber nirgends va_list, va_start, va_end vor.

Hast du den Code aus einer vertrauenswürdigen Quelle?
#1727058
Lesenswert?
• ▲
▼
Karl heinz Buchegger schrieb:

> Das hätte ich so nicht erwartet.

Um das näher auszuführen.
Erwartet hätte ich
1
#include <stdarg.h>
2

3
static int print(char** out, const char* format, va_list varg)
4
{
5
  ....
6
}
7

8
int printf(const char* format, ...)
9
{
10
  int retVal;
11
  va_list arguments;
12

13
  va_start( arguments, format );
14
  retVal = print( NULL, format, arguments );
15
  va_end( arguments );
16

17
  return retVal;
18
}
19

20
int sprintf(char* out, const char* format, ...)
21
{
22
  int retVal;
23
  va_list arguments;
24

25
  va_start( arguments, format );
26
  retVal = print( out, format, arguments );
27
  va_end( arguments );
28

29
  return retVal;
30
}

und in print dann Zugriff über va_arg, wenn im Formatstring ein % 
auftaucht.
Gast #1727481
Lesenswert?
• ▲
▼
Hallo,
erstmal Danke fuer die schnellen antworten.
habe das mit den va_list, va_start, va_end getestet aber es hat nicht so 
wirklich hingeheauen.
Jedoch frage ich mich selbst wieso ich nicht auf die idee gekommen bin 
die eigentlich printf umzulegen.
Nach entfernen dmeiner routinen und umlegen der eingebauten printf hat 
alles einwandfrei funktioniert!
Nachmal herzlichen Dank!

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.