const char * + "/_" -> const char * ???

  • Hallo,


    sieht jemand in folgender Konstruktion ein Problem?


    const char * dirfilenamechars = NULL;


    char *s;
    asprintf(&s, "%s%s", tr(FileNameChars), "/_");
    dirfilenamechars = strdup(s);
    free(s);


    "/" benötige ich für Verzeichnisse.
    "FileNameChars" ist eine Vorgabe vom vdr, wobei ich allerdings nicht verstehe, wieso "_" nicht in der deutschen Sprache enthalten ist, in anderen jedoch schon.
    Funktionieren tut's so auch, aber ob dies so richtig ist, weiß ich nicht.


    Danke für eventuelle Antworten.
    Frank

  • Hi,


    wenn's der Compiler mag, dann sollte es kein Problem sein - die Frage ist nur, ist's auch das, was Du magst ???


    Was willst Du denn machen? Bist Du sicher, dass der Speicher, an der dirfilenamechars zeigt, auch noch "gültigen" Inhalt hat, nachdem Du s gefreet hast? Kann mich irren, C-coden ist scho lange her ...


    Hät's nicht auch ein bisserl strcat, strcpy auch getan?


    cu,
    Alex

    yaVDR 0.4 * M4N78PRO * AMD Athlon II X2 240 * TT S2 3200 * 2 x SkyStar 2.6D * LianLi C33 * Atric IR Einschalter * KingSpec 16GB SSD * 2TB HDD * Samsung LE37B530

    Einmal editiert, zuletzt von kapplah ()

  • Prinzipiell ist die Sequenz ok, nur dass du mit dem strdup/free eine unnötige Kopie zuviel machst.


    char *s;
    asprintf(&s, "%s%s", tr(FileNameChars), "/_");
    dirfilenamechars = s;


    täts auch


    kapplah: strcpy und strcat hättens auch getan, allerdings muss er dann vorher die Länge des Zielstrings kennen um sich Speicher zu holen..

  • danke erstmal


    LordJaxom: ich werd es mal probieren, weiß nicht, ob ich nicht genau diese Konstruktion auch schon getestet hatte, bei einem der getesteten Versuche bekam ich irgendwie nur Müll, der jedoch nicht zum Absturz führte.
    Das "free(s)" ist wohl in jedem Fall unnötig?


    Gruß
    Frank

  • LordJaxom:


    Habs jetzt getestet, geht, mit free(s) hatte ich diese Konstruktion wahrscheinlich mal probiert, dabei die erwähnte Erscheinung.


    Hatte allerdings nicht erwähnt, daß "dirfilenamechars" global und "s" nur lokal deklariert ist (hoffe, ich hab es richtig ausgedrückt).


    Gruß
    Frank

  • Hallo Frank,


    Warum gibst Du die Zusatzzeichen nicht gleich vorn mit an?

    Code
    asprintf(&FileNameCharsAllowed, "%s/$(){}!%%@", tr(FileNameChars));

    funktioniert bei meinem Plugin ohne Probleme.


    Hardy

    Suche: 6 Richtige für die nächste Lottoziehung
    PS: Wer Rechtschreibfehler findet, darf sie behalten!

  • Hallo Hardy,


    gute Frage, von Blindheit geschlagen, manchmal sieht man den Wald vor lauter Bäumen einfach nicht mehr, klar, hast Recht, warum einfach, wenn's kompliziert geht, mach ich gleich, eh ich's wieder vergesse.


    Danke
    Frank

Jetzt mitmachen!

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