Pointer, Strings und Co.



  • Hallo Leute!

    Ich arbeite zur Zeit an meinem Maturaprojekt und zur Zeit scheitere ich an grundlegenden Dingen. Es ist zwar gerade nicht so wichtig, aber es würde mich trotzdem sehr interessieren.

    Ich habe ein Funktion mit C und OpenGL erstellt, die ein Bild speichert. Ich will diese Funktion jetzt jede Sekunde aufrufen und der Dateinamen soll fortlaufend benennt werden (Bild1.jpg, Bild2.jpg, usw.).
    Ich weiß allerdings nicht wie ich das in die Funktion einbaue und wie ich da genau mit Strings/Pointern arbeiten muss?!

    In dieser Form wird das Bild in der Hauptfunktion gespeichert:
    write_JPEG_file ("data/pictures/test.jpg",100,image_buffer,582,500);

    Außerdem wollte ich fragen, mit welcher Schleife ich diese Funktion einmal in der Sekunde aufrufen kann?

    Vielen Dank, Mfg, David



  • es gibts Sleep(/*millisekunden*/) in windows. Du brauchst die header windows.h (die wirst du aber sicha schon includest haben)
    über string gibts es genügend dokumtation
    ALs erleichterung es ist sehr leicht eine fortzähleng zu machen
    Pseodocode

    while(1){
    ++count;
    string a = "c:/pfad/pfad/test";
    a+= itoa(count);
    a+= ".jpg"
    write_JPEG_file (a.c_str(),100,image_buffer,582,500);
    
    }
    


  • spjoe schrieb:

    es gibts Sleep(/*millisekunden*/) in windows. Du brauchst die header windows.h

    Und was hat des mit ANSI C zu tun? 😕

    In ANSI C gibt's imho nichts zum Thema dedizierter Wartezeiten.



  • spjoe schrieb:

    Pseodocode

    while(1){
    ++count;
    string a = "c:/pfad/pfad/test";
    a+= itoa(count);
    a+= ".jpg"
    write_JPEG_file (a.c_str(),100,image_buffer,582,500);
    
    }
    

    Oh mann, was hat dieser Code in einem ANSI-C Forum zu suchen? ANSI-C kennt kein String und ebensowenig itoa(). Zumal das mit snprintf() bzw. sprintf() imho einfacher geht (da ja wohl jeder mit printf() umgehen kann)...
    Über dein Windows/Unix Mischpfad will ich besser nix sagen... (EDIT2: hab mich gerade berichtigen lassen, Windows scheint damit zurechtzukommen... sorry)
    Nix für ungut...

    Also doch besser so:

    #include <stdio.h>
    
    int main(){
            char buff[100];
            int i=0;
            for(i=0;i<1000;i++){
                    snprintf(buff, sizeof(buff)-1, "%s%d%s","pfad/nach/irgendwo/file",i,".jpg");
                    printf("%s\n",buff); // durch deinen Befehl ersetzen
            }
            return 0;
    }
    

    Falls der Compiler snprintf() noch nicht kennt (ist C99), dann halt sprintf() nehmen...

    Das mit dem einmaligen Aufrufen in der Sekunde, soll er da tatsächlich warten und nichts tun? Dann wie bereits erwähnt Sleep(/*millisekunden*/) (Windows) oder sleep(/*sekunden*/) (POSIX) nehmen.

    Edit: Da war einer schneller... zumindest halbwegs 😉



  • hab vergessen das ich im moment im ansi c thread bin sry.

    und war auch nur ein pseodo code (nur zur erklärung)

    mfg


Anmelden zum Antworten