Seite 1 von 1

[C++] Text als Iterator-Päärchen mit printf() ausgeben

Verfasst: 20.10.2014, 17:58
von Schrompf
Moin,

ich hab grad die Chats und Google befragt, aber alle meinen, das sei unmöglich. Vielleicht hat hier jemand eine Idee.

Gegeben: Character Sequence mit const char* Start und const char* Ende
Gesucht: Formatstring-Parameter für printf(), mit dem ich das direkt ausgeben kann

Ich habe mich zum "%*s"-Parameter belesen, mit dem man die Ausgabebreite als Parameter angeben kann. Die Doku meint aber, es wird nur gepaddet, falls der Eingabetext zu kurz ist. Wenn der Text länger ist, wird er bis zum Nullbyte ausgegeben. Der hört also nicht beim End auf mit Lesen, sondern sucht trotzdem darüberhinaus das abschließende Nullbyte. Und das kommt in diesem Fall potentiell gar nicht.

Aktuell löse ich es mit einem Mehrzeiler:

Code: Alles auswählen

printf( "Das Vorher");
fwrite( der Iteratorbereich );
printf( "Das Nachher");
Aber das ist mühsam. Hat jemand eine Idee?

Re: [C++] Text als Iterator-Päärchen mit printf() ausgeben

Verfasst: 20.10.2014, 19:10
von dot
Wieso printf in C++?

Re: [C++] Text als Iterator-Päärchen mit printf() ausgeben

Verfasst: 20.10.2014, 19:44
von Krishty
Genau – printf() mit seinen C-Strings lutscht Eselschwänze. Ich habe deshalb ein eigenes printf()-Derivat implementiert, das mit Range of Characters arbeitet … und indem ich den ganzen „Sicherheits“müll rausgeschmissen habe, wurde es sogar recht kompakt. Baut aber zu sehr auf der Visual C++-CRT auf, als dass ich es veröffentlichen könnte :(

Re: [C++] Text als Iterator-Päärchen mit printf() ausgeben

Verfasst: 20.10.2014, 23:01
von Schrompf
Ich generiere halt Text in einen Speicherpuffer. Es ist kein printf(), aber vsnprintf(), nutzt also die selbe Formatierungslogik. Und ich mag das unmittelbare Formatieren halt sehr. Ich fasse eure Antworten mal als "Es ist unmöglich." zusammen.

Re: [C++] Text als Iterator-Päärchen mit printf() ausgeben

Verfasst: 21.10.2014, 21:41
von Ingrater
Also ich hab schon %.*s benutzt um nicht null terminierte strings auf der Konsole auszugeben, und das hat ohne Probleme funktioniert. Sprich printf hat bei mir nicht bis zum 0-byte weitergesucht (es gab auch gar kein 0-byte). Also wenn ich dein Problem richtig verstanden habe kannst du es wie folgt lösen.

Code: Alles auswählen

printf("%.*s", endIt - startIt, startIt);

Re: [C++] Text als Iterator-Päärchen mit printf() ausgeben

Verfasst: 21.10.2014, 23:07
von Schrompf
Interessant. Genau das meinte ich oben mit %*s, aber ich hatte da wohl die Doku falsch verstanden. Danke!