Frage zu sscanf



  • Hallo!

    Wenn ich

    char temp[256], dummy[256];
    sscanf("ag.bg", "%s.%s", &dummy, &temp);
    

    mache, ist weder dumm ab noch temp bg - wieso nicht?
    Was müsste ich anders machen?



  • char temp[256], dummy[256];
    strcpy( temp, "ag" );
    strcpy( dummy, "bg" );
    

    greetz, Swordfish



  • Ja, eigentlich gehts um was ganz anderes...

    DIR *verzeichniss;
    struct dirent *eintrag;
    
    verzeichniss = opendir("level");
    if (!verzeichniss) throw;
    
    char dateien[16][260];
    char temp[256], dummy[256];
    int i_dat=0;  
    while ( ( eintrag=readdir(verzeichniss) ) && i_dat<16)
    {
      sscanf(eintrag->d_name, "%s.%s", &dummy, &temp);
      if ( strcmp(temp, "lvl")==0 ) 
      {
        strcpy(dateien[i_dat], eintrag->d_name);
        ++i_dat;
      } 
    }
    closedir(verzeichniss);
    

    Eigentlich will ich ja die Endung kriegen. Das mit ab.gb war nur ein Beispiel...



  • der punkt muss ein leerzeichen sein, weil 'sscanf' strings nur bis zu 'white space' einliest. dann sollte es gehen.
    falls du windows benutzt: http://msdn2.microsoft.com/en-us/library/e737s6tf(VS.80).aspx
    🙂



  • Das ganze ist SDL und bissl C++-Libraryzeug, demzufolge möcht ich ungern auf Windowsspezifische Sachen zurückgreifen 😞

    Kann mir jemand zufällig sagen, ob es so was wie str_replace in php auch in C++ gibt? Dann mach ich einfach das . zu nem Leerzeichen und das geht..
    Oder gibts ne Möglichkeit, sonst die letzen 3 Buchstaben des Namens zu ermitteln?



  • DaGeRe schrieb:

    Das ganze ist SDL und bissl C++-Libraryzeug, demzufolge möcht ich ungern auf Windowsspezifische Sachen zurückgreifen 😞

    Kann mir jemand zufällig sagen, ob es so was wie str_replace in php auch in C++ gibt? Dann mach ich einfach das . zu nem Leerzeichen und das geht..
    Oder gibts ne Möglichkeit, sonst die letzen 3 Buchstaben des Namens zu ermitteln?

    Wenn du schon solche Sachen mit den Strings anfangen willst, kann ich dir nur raten auf std::string umzusteigen, da ist eine Menge wesentlich einfacher und es man muss sich keine Sorgen um Buffer-Overflows etc. machen.



  • DaGeRe schrieb:

    Oder gibts ne Möglichkeit, sonst die letzen 3 Buchstaben des Namens zu ermitteln?

    nach dem '.' müssen ja nicht zwangsläufig 3 zeichen kommen.
    vielleicht sowas?

    char *behind_first_point (char *in)
    {
        while (*in)
            if (*in++ == '.')
                return in;
        return 0;
    }
    ...
    char *behind_last_point (char *in)
    {
        char *p = 0;
        while (*in)
            if (*in++ == '.')
                p = in;
        return p;
    }
    

    erstere findet den ersten punkt, die andere funktion den letzten.
    beide geben 0 zurück, wenn kein punkt da war.

    char *test = "la.la.doof";
    cout << behind_last_point(test) << endl;
    

    🙂



  • Hey undertaker 🙂

    Herzlichen Danke, dass du hier einfach so ne Funktion für mich machst 🙂 Hab ja schon die Artikel von wegen "wir müssen dir nicht helfen, sei lieb" und so gelesen, und find das echt total toll 👍

    Die behindlastpoint suchte ich natürlich für meinen Code. Leider habe ich jetzt gerade das ganze mit std::string gelöst... Aber finds trotzdem toll, dass du einfach so ne Funktion erstellt hast.



  • Vermutung: Die Strings müssen nicht mit & angegeben werden.


Anmelden zum Antworten