asprintf kaputt?

  • Hi Folks!


    Wenn ich mit asprintf folgfendes ausgebe, dann sieht daß so aus:


    string1="Hallo Welt!"
    string2="Nochmal hallo Welt!"


    asprintf(&puff,"%-15s \t\t %-5s",string1,string2)


    -> "Hallo W Nochm"


    Der String1 sollte mit %-15s linksbündig und mit Blanks AUFGEFÜLLT werden. Stattdessen löscht er einiges vom string1. Was soll das denn?

  • leider kenn ich das Drumrum nicht,


    asprintf braucht soweit ich weiß einen Pointer. sprintf kann in einen bereits reservieren Speicher schreiben.
    Folgender Code geht auch bei mir :

    Code
    int main () {
        char string1[256]="Hallo Welt!";
        char string2[256]="Nochmal hallo Welt!";
        char *puff;
        asprintf(&puff,"%-15s \t\t %-5s",string1,string2);
    
    
        printf("Ausgabe: %s\n",puff);
        free(puff);
    }


    Gruß
    Roland

    Software: VDR 1.4.3, mp3, osdpip, streamdev-server, femon, wapd, X11, Wireless Keyboard Kernel: 2.6.18
    Hardware: 1x DVB-S v 1.3, 1x Skystar 2, Celeron@2GHz, 256 MB RAM, 4 HDs Raid1/5, Total: 600 GB, Asus P4S533 cmi8738 & LAN on board 6 PCI
    40" Sammelbestellungs-LCD an ATI Radeon 9550 DVI-Out + tvtime, 70 cm TV an J2-RGB-Out
    Organisator der ersten und zweiten VDR-Sanitizer Sammelbestellung.
    In progress: POV-ION 330 - MediaPointer MP-S2 - vdr 1.7.9 - vdr-xine(vdpau)

  • Das Drumherum:
    Im nordlichtsepg-plug, mywhatonitem.c, ca. Zeile 37, wird mit asprintf Kanalnummer, Name, ReplayBalken, Event ausgegeben.
    Wobei name mit %-15s formatiert ist, dannach kommt ein tab und Replaybalken.
    Normalerweise (FixedFont?) sollte eine Name der kürzer als 15 Zeichen ist linksbündig angezeigt werden, mit Blanks aufgefüllt werden und dann kommt der Replaybalken. Der Tab bewirkt zwar daß der nachfolgende Replaybaleken trotz verschieden langen Strings genau untereinanderstehen, es wird aber etwas vom Namen "ausradiert". Ohne Tabs ist es zwar richtig aber die Spalten stehen nicht mehr direkt untereinander.


    (Ich probiere jetzt deinen Vorschlag)

  • Wenn ich dein Beispiel ablaufen lasse dann ist es (fast) so wie es sein sollte. Der zweite String wird ganz angezeigt obwohl er nur %-5s anzeigen sollte. Beim VDR/NordlichtsEPG sieht es ganz anders aus. Ich nehme an der Ausgabe vom VDR, da die eigentliche Ausgabe nicht vom Plugin übernommen wird.


    Ein Beispiel noch (bim VDR/NordlichtsEPG):


    s1="12345"
    s2="1234567890"
    s3="1234"


    asprintf(&a,"%-10s \t %s2 %s3",s1,s2,s3)


    Obwohl der Tab nach dem ersten String angezeigt werden soll, also ab 11 Stelle, wird im String von vorn angefangen. D.h. der String nach dem Tab überschreibt teilweise der Ersten. Bei Zwei Tabs findet die Ausgabe zwar an der richtigen Stelle statt, aber dort wo der erste Tab steht wird mit Blanks aufgefüllt bzw. überschrieben.


    Harte Welt .... Mir fällt nix mehr ein um den Sendernamen ganz anzeigen zu lassen. Bei einem 16:10 Monitor, "kleiner" Schriftart und ganzflächigem OSD ist nämlich genug Platz auf dem Bildschirm.

  • "%-5s" gibt die _minimale_ Feldbreite an. Will man _abschneiden_, so muß Precision angeben werden,
    also z.B. "%-5.5s"


    CU
    Oliver

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!