C++ Programm wird nicht mehr richtig ausgeführt!



  • Hi
    Mein Problem wäre folgendes :

    string string_var2="BeispielBatchBefehl";
    
    string string_var="BeispielBatchBefehl" + string_var2
    
    system(string_var.c_str())
    

    dieser code soll verdeutlichen wie ich einen batch befehl zusammensetze im c++ code und diesen dann ausführe...
    dieser code läuft noch gut aber dann benutze ich windows zeitfunktionen und rechen operationen und es kommen total sinnlose und viel zu hohe ergebnisse als ergebnis heraus. ich kann mir das nicht wirklich erklären...
    weiß da jemand einen grund?

    soweit ich jetzt erkennen konnte hängt es zusammen mit dem system(..) befehl zusammen wenn ich diesen auskommentieren funktionieren meine Rechnungen wieder... aber wieso?
    sollte ich eventuell den system() befehl in einen eigenen thread legen?

    oder gibt es da besser alternativen zu system() ? um batch befehle auszuführen im c++ code?

    mfg 🙂



  • [quote="xHilfe123"]Hi

    string string_var2="BeispielBatchBefehl";
    
    string string_var="BeispielBatchBefehl" + string_var2;
    
    system(string_var.c_str())
    

    sry semikolon hatte hier im foren-post gefehlt... i.wie beim kopieren verloren gegangen...

    nachtrag: der compiler läuft ohne fehler und warnung durch...



  • Lol, dann zeig auch mehr von deinem Code. So ist dein Code bisher zwar nicht gut (und unvollständig ohne main und so), aber doch richtig.

    Vor allem wenn du Rechnungen drumherum hast, dann sollten wir die sehen, um was dazu sagen zu können.



  • [quote="xHilfe123"]

    xHilfe123 schrieb:

    Hi

    string string_var2="BeispielBatchBefehl";
    
    string string_var="BeispielBatchBefehl" + string_var2;
    
    system(string_var.c_str())
    

    sry semikolon hatte hier im foren-post gefehlt... i.wie beim kopieren verloren gegangen...

    nachtrag: der compiler läuft ohne fehler und warnung durch...

    Also erstmal solltest du auf jedenfall die Benennung deiner Variablen überdenken.

    Ich bin kein Fan der ungarischen Notation und erst Recht nicht von dem was du da machst.

    Jede halbwegs aktuelle Entwicklungsumgebung zeigt Dir mit einem mouse-over an was für eine Variable es gerade ist und eigentlich sollte man es auch ohne das wissen.

    Bitte zeig mehr Code vor allem deine Rechnungen.
    Ich kann mir nicht vorstellen, dass der Code den du gerade gepostet hast dafür verantwortlich ist.



  • Skym0sh0 schrieb:

    Lol, dann zeig auch mehr von deinem Code. So ist dein Code bisher zwar nicht gut (und unvollständig ohne main und so), aber doch richtig.

    Vor allem wenn du Rechnungen drumherum hast, dann sollten wir die sehen, um was dazu sagen zu können.

    der code ist relativ umfangreich... ist eher schlecht hier zusammhängend code zuposten...

    mein problem ist eher von der logischen seite wnen ich die system() funktion nicht nutze dann funktionieren die rechnungen fehlerfrei...! 😉

    kann es sein das die system() funktion einfluss auf den programmablauf hat?
    oder i.wie anders den weiteren ablauf eines programmes stören kann?

    time_t zeitstempel;
    zeitstempel=time(NULL);
    jetzt=localtime(&zeitstempel);
    
    //Zeitwerte
    jetzt->tm_year;
    jetzt->tm_mon;  
    jetzt->tm_mday;
    

    aber nur nochmal zum verständnis nutze ich diese zeit funktion und rechne dann mit ihr...
    dann ermittle ich noch von dateien mit der Zeitfunktion das datei alter und rechne...
    jetzt meinen code hier zu posten wäre glaube ich eher unübersichtlich...!

    Mein Problem ist das sobald ich die system() funktion nutze alle Zeitfunktionen falsche ergebnisse liefern...
    kann mir das jemand erklären ??



  • blubb schrieb:

    Also erstmal solltest du auf jedenfall die Benennung deiner Variablen überdenken.

    die variablen sind nur schnell beispielsweise benannt...! 😮
    wo sollte denn da ein fehler liegen in der variablen benennung?!
    bitte keine geschmacktssachen oder sowas bitte fakten! die mir zur lösung helfen...!

    blubb schrieb:

    Ich bin kein Fan der ungarischen Notation und erst Recht nicht von dem was du da machst.

    was mach ich denn "da"?

    string string_var1, string_var2;
    

    was stört dich daran um ein Beispiel zu verdeutlichen?

    blubb schrieb:

    Jede halbwegs aktuelle Entwicklungsumgebung zeigt Dir mit einem mouse-over an was für eine Variable es gerade ist und eigentlich sollte man es auch ohne das wissen.

    keine ahnung was ich damit anfangen soll?! 😕

    ich weiß was für variablen?! bitte ließ meine fragen oben komplett oder nochmal richtig! 🙄

    mir geht es um die funktionsweise von system() und ob da fehler auftreten können oder code-ablauf probleme oder ähnliches?

    blubb schrieb:

    Bitte zeig mehr Code vor allem deine Rechnungen.
    Ich kann mir nicht vorstellen, dass der Code den du gerade gepostet hast dafür verantwortlich ist.

    die rechnungen funktionieren und sind zu umfassend hier zu erklären...
    vll hab ich mich am anfang unklar ausgedrückt mir geht es lediglich darum ob bei system() solch beschriebene fehler auftreten können oder ähnliches.
    😕

    was kann dir das zur lösung helfen ich habe 2 code-beispiele gepostet meiner meinung mein vorgehen im code verdeutlichen... 😉



  • xHilfe123 schrieb:

    Mein Problem ist das sobald ich die system() funktion nutze alle Zeitfunktionen falsche ergebnisse liefern...
    kann mir das jemand erklären ??

    Hast du beachtet, dass Funktionen wie localtime einen Zeiger auf eine statisch alloziierte Struktur zurückliefern, deren Inhalt sich durch nachfolgende Aufrufe von Zeitfunktionen ändern kann?


  • Mod

    xHilfe123 schrieb:

    Skym0sh0 schrieb:

    Lol, dann zeig auch mehr von deinem Code. So ist dein Code bisher zwar nicht gut (und unvollständig ohne main und so), aber doch richtig.

    Vor allem wenn du Rechnungen drumherum hast, dann sollten wir die sehen, um was dazu sagen zu können.

    der code ist relativ umfangreich... ist eher schlecht hier zusammhängend code zuposten...

    Minimalbeispiel erstellen! Der Thread ist nicht umsonst als Wichtig markiert.

    Ohne ein solches Beispiel ist dieser Thread hier bloß ein Ratespiel, bei dem der Fragesteller nicht einmal die richtige Antwort kennt. Also komplett sinnlos.



  • MFK schrieb:

    xHilfe123 schrieb:

    Mein Problem ist das sobald ich die system() funktion nutze alle Zeitfunktionen falsche ergebnisse liefern...
    kann mir das jemand erklären ??

    Hast du beachtet, dass Funktionen wie localtime einen Zeiger auf eine statisch alloziierte Struktur zurückliefern, deren Inhalt sich durch nachfolgende Aufrufe von Zeitfunktionen ändern kann?

    ja ich wusste das aber ich wusste nicht das deren inhalt sich durch nachfolgende aufrufe ändern kann...

    das würde bei mir aber nur zu einem fehler führen wenn system() solche Inhalte ändert... kann soetwas sein? bzw. macht system() soetwas? hat doch eigentlich nichts mit zeit zutun?

    SeppJ schrieb:

    Ohne ein solches Beispiel ist dieser Thread hier bloß ein Ratespiel, bei dem der Fragesteller nicht einmal die richtige Antwort kennt. Also komplett sinnlos.

    entschuldigung hab ich nicht gesehen und gelesen...
    ich bastel schnell eins zusammen... 5 min ...



  • xHilfe123 schrieb:

    SeppJ schrieb:

    Ohne ein solches Beispiel ist dieser Thread hier bloß ein Ratespiel, bei dem der Fragesteller nicht einmal die richtige Antwort kennt. Also komplett sinnlos.

    entschuldigung hab ich nicht gesehen und gelesen...
    ich bastel schnell eins zusammen... 5 min ...

    5 Minuten sind schon lange rum 😃



  • Skym0sh0 schrieb:

    xHilfe123 schrieb:

    SeppJ schrieb:

    Ohne ein solches Beispiel ist dieser Thread hier bloß ein Ratespiel, bei dem der Fragesteller nicht einmal die richtige Antwort kennt. Also komplett sinnlos.

    entschuldigung hab ich nicht gesehen und gelesen...
    ich bastel schnell eins zusammen... 5 min ...

    5 Minuten sind schon lange rum 😃

    Sind Arbeitgeberminuten 😉



  • entschuldigt aber mir ist eben aufgefallen das der fehler nicht da lang wo ich vermutet hatte...
    zwischenzeitlich ging die ftlastwritetime() da dachte ich das dort der fehler nicht liegen kann aber dort kommen sinnlose ergebnisse nicht bei system()..

    schaut es euch mal an... vll kann mir jemand nen tipp geben wie ich ne verlässliche ftlastwritetime() bekomme...

    main.cpp

    #include <sys/types.h>
    #include <windows.h>
    #include <winnt.h>
    #include <ctime>
    #include <iostream>
    #include <string>
    
    #include "event_log.h"
    
    int main()
    {
    	//struct tm *localtime(const time_t *timer);
    	time_t zeitstempel_in_tagen;
    	time_t zeitvergleich;
    	time_t zeitstempel;
    	tm *jetzt;
    	tm *file;
    
    	zeitstempel=time(NULL);
    	jetzt=localtime(&zeitstempel);
    
    	FILETIME datei_zeitstempel;
    	SYSTEMTIME system_zeitstempel;
    	WIN32_FIND_DATA wfd;
    
    	//time(NULL) liefert die anzahl der sekunden seit 1.1.1970 zurück!
    
    	zeitstempel_in_tagen= (((zeitstempel/60)/60)/24);
    
    	//Zeitwerte
    	std::cout << jetzt->tm_mday << "/" << jetzt->tm_mon+1 <<"/" <<jetzt->tm_year+1900 << std::endl;
    	std::cout <<"Sekunden: " << zeitstempel << std::endl;
    	std::cout <<"Tage: " << zeitstempel_in_tagen << std::endl;
    
    	//event_schreiben(meldungstext,"SUCCESS");
    	FindFirstFile("C:/../../../../x.txt",&wfd);
    	std::cout<<wfd.cFileName<<std::endl;
    	datei_zeitstempel=wfd.ftLastWriteTime;
    
    	FileTimeToSystemTime(&datei_zeitstempel, &system_zeitstempel);
    
    	zeitvergleich = TimeFromSystemTime(&system_zeitstempel);
    	zeitstempel_in_tagen= (((zeitvergleich/60)/60)/24);
    
    	std::cout << "zeitvergleich-time_t-inTagen: " << zeitstempel_in_tagen << std::endl;
    
    	std::cout << "zeitvergleich-time_t: " << zeitvergleich << std::endl;
    }
    

    funct.cpp

    #include <sys/types.h>
    #include <windows.h>
    #include <cstdlib>
    #include <cstring>
    #include <ctime>
    #include <string>
    
    time_t TimeFromSystemTime(const SYSTEMTIME *pTime)
    {
    struct tm tm;
    memset(&tm, 0, sizeof(tm));
    
    tm.tm_year = pTime->wYear -1900;
    tm.tm_mon = pTime->wMonth -1;
    tm.tm_mday = pTime->wDay;
    
    tm.tm_hour = pTime->wHour;
    tm.tm_min = pTime->wMinute;
    tm.tm_sec = pTime->wSecond;
    
    return mktime(&tm);
    }
    

    funct.h

    /*
     * event_log.h
     *
     *  Created on: 15.09.2014
     *      Author: claeseke
     */
    
    #ifndef EVENT_LOG_H_
    #define EVENT_LOG_H_
    
    time_t TimeFromSystemTime(const SYSTEMTIME *pTime);
    
    #endif /* EVENT_LOG_H_ */
    

    sry das es kurz gedauert hat... 😃



  • Lektion 1: Rückgabewerte prüfen



  • hab den fehler gefunden und behoben... vielen dank!! 👍

    thema und thread kann geschlossen werden!! *close*


  • Mod

    xHilfe123 schrieb:

    entschuldigt aber mir ist eben aufgefallen das der fehler nicht da lang wo ich vermutet hatte...

    Lass mich raten: Das ist dir aufgefallen während des Erstellens des Minimalbeispiels? Das ist kein Zufall. Du kannst hoffentlich etwas daraus lernen.



  • SeppJ schrieb:

    xHilfe123 schrieb:

    entschuldigt aber mir ist eben aufgefallen das der fehler nicht da lang wo ich vermutet hatte...

    Lass mich raten: Das ist dir aufgefallen während des Erstellens des Minimalbeispiels? Das ist kein Zufall. Du kannst hoffentlich etwas daraus lernen.

    😃
    jop klar hab ich was gelernt ...

    1. beim erstellen des minimal beispiels fallen fehler sehr gut auf...! 🙂

    2. das nächste mal bekommt ihr ein ordentliches minimal beispiel gleich von anfang an... !

    vielen dank an alle tipps und antworten...
    bis später
    lg


Log in to reply