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

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

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

Beitrag 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?
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
dot
Establishment
Beiträge: 1734
Registriert: 06.03.2004, 18:10
Echter Name: Michael Kenzel
Kontaktdaten:

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

Beitrag von dot »

Wieso printf in C++?
Benutzeravatar
Krishty
Establishment
Beiträge: 8238
Registriert: 26.02.2009, 11:18
Benutzertext: state is the enemy
Kontaktdaten:

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

Beitrag 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 :(
seziert Ace Combat, Driver, und S.T.A.L.K.E.R.   —   rendert Sterne
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

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

Beitrag 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.
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Benutzeravatar
Ingrater
Establishment
Beiträge: 103
Registriert: 18.04.2007, 21:52

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

Beitrag 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);
Benutzeravatar
Schrompf
Moderator
Beiträge: 4854
Registriert: 25.02.2009, 23:44
Benutzertext: Lernt nur selten dazu
Echter Name: Thomas Ziegenhagen
Wohnort: Dresden
Kontaktdaten:

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

Beitrag von Schrompf »

Interessant. Genau das meinte ich oben mit %*s, aber ich hatte da wohl die Doku falsch verstanden. Danke!
Früher mal Dreamworlds. Früher mal Open Asset Import Library. Heutzutage nur noch so rumwursteln.
Antworten