sscanf mit %a

  • Hi,


    ich versuche mich gerade an einem VDR-Plugin und habe ein Problem.
    Folgender Code führt beim Compilieren

    Code
    char *fileNameBuf=NULL;
    char *nameBuf=NULL;
    
    
    int fields=sscanf(s, "%a[^;];%a", &fileNameBuf, &nameBuf);


    zu dieser Fehlermeldung

    Code
    test.c:4: Warnung: float Format, Zeiger Argument (Argument 4)


    Was übersehe ich, bzw. was kann das verursachen?
    Andere Plugins und VDR selbst machen es doch auch so?
    Und wenn ich es als kleines Mini-Test-Programm schreibe, funktioniert es doch auch!


    Sind zwar nicht viele Informationen, aber vielleicht kennt ja jemand die Situation und die Lösung?



    Danke
    Monroe

  • %a ist die Input-Conversion für einen Float-Typ.


    %[^;] ist die Input-Conversion für einen String der bis zum nächsten ; reicht. Das a vor der Conversion ist ein Modifizierer, der sscanf bedeutet den Puffer selbst zu allokieren. Das a hat hier zwei verschiedene Bedeutungen


    Was Du also brauchst, ist eine String-Conversion, die mit dem a modifiziert wird. Wenn Du nur das nächste Wort einlesen willst (selbe Wirkung wie %s ohne Allokation), sollte das hier %as sein, wenn Du bis zum Ende der Zeile lesen willst, nimm am besten %a[^\n]

  • HI,
    was beabsichtigst Du damit? Lesen eines float (in eine Variable vom Typ float?
    Dann must Du erst einen Variable vom typ float bereitstellen.


    Ansonsten kenne ich %a nicht. Wo hast Du das her?
    Edit: war zu langsam. Aber im ernst, habe %a noch nie benutzt. Ist doch %e f oder g.

    Grüße, Dieter :)

    Einmal editiert, zuletzt von Dieter ()

  • Hi Danke, schon wieder was gelernt.
    Bei MS gibt es das nicht.

    Grüße, Dieter :)

  • Zitat

    Original von LordJaxom
    %a ist die Input-Conversion für einen Float-Typ.


    %[^;] ist die Input-Conversion für einen String der bis zum nächsten ; reicht. Das a vor der Conversion ist ein Modifizierer, der sscanf bedeutet den Puffer selbst zu allokieren. Das a hat hier zwei verschiedene Bedeutungen


    Was Du also brauchst, ist eine String-Conversion, die mit dem a modifiziert wird. Wenn Du nur das nächste Wort einlesen willst (selbe Wirkung wie %s ohne Allokation), sollte das hier %as sein, wenn Du bis zum Ende der Zeile lesen willst, nimm am besten %a[^\n]


    Vielen Dank, es compiliert jetzt.
    Und ich glaube ich habe es sogar verstanden. Naja, das letzte mal, dass ich programmiert habe liegt schon ein paar Tage zurück.

    Zitat

    Ich halte auch nicht besonders viel von Spracherweiterungen (egal ob von MS oder GNU), aber ich schätze da VDR sowieso ziemlich auf Linux angewiesen ist, kann man sich das hier erlauben


    Sehe ich genau so, würde es ansonsten auch nicht machen.



    Monroe

Jetzt mitmachen!

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