<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar..]]></title><description><![CDATA[<p>Hi,</p>
<p>bin gerade dabei eine zweite kleine funktion zu schreiben. dabei stoße ich auf zwei fehler<br />
1.) die funktion gibt einen zeiger auf time_t zurück, wieso? time_t habe ich in der funktion doch gar keinen zeiger gegeben?<br />
Lösung: die funktion mit nem zeiger versehen, ist das so richtig??</p>
<p>2.) se_period_time ist nur lokal verfügbar. wie kann ich dieses array als return nutzen? (bei meiner ersten funktion nutze ich als return einen string, das klappt logischerweise..)</p>
<p>anbei mal der code.. wer kann mir hier einen tipp geben und mir sagen wieso time_t einen zeiger hat?? und wie ich die variable se_period_time dem return übergeben kann?</p>
<pre><code class="language-cpp">time_t make_period_time(std::vector&lt;std::string&gt; period_datetime) {
//time_t *make_period_time(std::vector&lt;std::string&gt; period_datetime) { 
// hab das zeiger problem so gelöst...

        struct tm se_period_tm;
        time_t se_period_time[period_datetime.size()];

        for(unsigned int i = 0; i &lt; period_datetime.size(); i++) {

            if(strptime(period_datetime[i].c_str(), &quot;%Y-%m-%d %H:%M:%S&quot;, &amp;se_period_tm) == NULL) {
                std::cout &lt;&lt; &quot;error convert datetime to time &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot;\n&quot;;
            } else {
                se_period_time[i] = mktime(&amp;se_period_tm);

                if(&amp;se_period_tm &lt; 0) {

                    std::cout &lt;&lt; &quot;error mktime from &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot;\n&quot;;

                } else {

                    std::cout &lt;&lt; &quot;datetime: &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot; in time: &quot; &lt;&lt; se_period_time[i] &lt;&lt; &quot; umgewandelt.\n&quot;;
                }
            }

        }

        return se_period_time; // außerhalb der funktion nicht mehr verfügbar..
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/266133/funktion-gibt-zeiger-auf-time_t-zurück-variable-nur-lokal-also-in-funktion-verfügbar</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 13:30:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/266133.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 May 2010 13:09:18 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar.. on Tue, 04 May 2010 14:25:35 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>bin gerade dabei eine zweite kleine funktion zu schreiben. dabei stoße ich auf zwei fehler<br />
1.) die funktion gibt einen zeiger auf time_t zurück, wieso? time_t habe ich in der funktion doch gar keinen zeiger gegeben?<br />
Lösung: die funktion mit nem zeiger versehen, ist das so richtig??</p>
<p>2.) se_period_time ist nur lokal verfügbar. wie kann ich dieses array als return nutzen? (bei meiner ersten funktion nutze ich als return einen string, das klappt logischerweise..)</p>
<p>anbei mal der code.. wer kann mir hier einen tipp geben und mir sagen wieso time_t einen zeiger hat?? und wie ich die variable se_period_time dem return übergeben kann?</p>
<pre><code class="language-cpp">time_t make_period_time(std::vector&lt;std::string&gt; period_datetime) {
//time_t *make_period_time(std::vector&lt;std::string&gt; period_datetime) { 
// hab das zeiger problem so gelöst...

        struct tm se_period_tm;
        time_t se_period_time[period_datetime.size()];

        for(unsigned int i = 0; i &lt; period_datetime.size(); i++) {

            if(strptime(period_datetime[i].c_str(), &quot;%Y-%m-%d %H:%M:%S&quot;, &amp;se_period_tm) == NULL) {
                std::cout &lt;&lt; &quot;error convert datetime to time &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot;\n&quot;;
            } else {
                se_period_time[i] = mktime(&amp;se_period_tm);

                if(&amp;se_period_tm &lt; 0) {

                    std::cout &lt;&lt; &quot;error mktime from &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot;\n&quot;;

                } else {

                    std::cout &lt;&lt; &quot;datetime: &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot; in time: &quot; &lt;&lt; se_period_time[i] &lt;&lt; &quot; umgewandelt.\n&quot;;
                }
            }

        }

        return se_period_time; // außerhalb der funktion nicht mehr verfügbar..
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1892240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892240</guid><dc:creator><![CDATA[taurus]]></dc:creator><pubDate>Tue, 04 May 2010 14:25:35 GMT</pubDate></item><item><title><![CDATA[Reply to funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar.. on Tue, 04 May 2010 16:10:00 GMT]]></title><description><![CDATA[<p>habs jetzt mit der besseren methode vector gelöst...</p>
<p>muss ich eben später beim vergleichen time_t in long int umwandeln <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":/"
      alt="😕"
    /> was solls</p>
<pre><code class="language-cpp">std::vector&lt;long int&gt; make_period_time(std::vector&lt;std::string&gt; period_datetime) {

        struct tm se_period_tm;
        time_t se_period_time[period_datetime.size()];
        std::vector&lt;long int&gt; time_return;

        for(unsigned int i = 0; i &lt; period_datetime.size(); i++) {

            if(strptime(period_datetime[i].c_str(), &quot;%Y-%m-%d %H:%M:%S&quot;, &amp;se_period_tm) == NULL) {
                //std::cout &lt;&lt; &quot;error convert datetime to time &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot;\n&quot;;
                time_return.push_back(-1);
            } else {
                se_period_time[i] = mktime(&amp;se_period_tm);

                if(&amp;se_period_tm &lt; 0) {

                    //std::cout &lt;&lt; &quot;error mktime from &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot;\n&quot;;
                    time_return.push_back(-1);

                } else {

                    //std::cout &lt;&lt; &quot;datetime: &quot; &lt;&lt; period_datetime[i] &lt;&lt; &quot; in time: &quot; &lt;&lt; se_period_time[i] &lt;&lt; &quot; umgewandelt.\n&quot;;
                    time_return.push_back(se_period_time[i]);
                }
            }

        }

        return time_return;
    }
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1892368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892368</guid><dc:creator><![CDATA[taurus]]></dc:creator><pubDate>Tue, 04 May 2010 16:10:00 GMT</pubDate></item><item><title><![CDATA[Reply to funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar.. on Wed, 05 May 2010 11:08:15 GMT]]></title><description><![CDATA[<p>Ich kenn dieses strptime usw. gedöns nicht wirklich aber,<br />
1. verstehe ich das ursprüngliche Problem nicht<br />
2. verstehe ich nicht was du da mit long int &lt;&gt; time_t hinundher machen willst<br />
3. funktioniert auch die zweite Funktion nicht.<br />
time_t se_period_time[period_datetime.size()]; &lt;- konstanter Ausdruck benötigt</p>
<p>Ich schlage mal folgendes vor (ohne Bewertung/Verbesserung des Zeitkrams...):</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;ctime&gt;

template&lt;typename InIter, typename OutIter&gt;
void make_period_time(InIter period_begin, InIter period_end, OutIter out) 
{ 
    struct tm se_period_tm;

    for(InIter i = period_begin; i != period_end; ++i, ++out) { 
        if(strptime(period_datetime[i].c_str(), &quot;%Y-%m-%d %H:%M:%S&quot;, &amp;se_period_tm) == NULL) 
            *out = time_t(-1); 
        else { 
            time_t t = mktime(&amp;se_period_tm);
            if(&amp;se_period_tm &lt; 0)  
               *out = time_t(-1); 
            else 
               *out = t; 
        } 
    } 
}

int main()
{
    using namespace std;
    vector&lt;std::string&gt; p(3);
    vector&lt;time_t&gt; times;
    times.reserve(p.size());

    make_period_time(p.begin(), p.end(), back_inserter(times));

    return 0;
}
</code></pre>
<p>Oder auch schön</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;iterator&gt;
#include &lt;vector&gt;
#include &lt;ctime&gt;
#include &lt;algorithm&gt;
#include &lt;functional&gt;

struct make_period_time : public std::unary_function&lt;time_t, std::string&gt;
{
    struct tm se_period_tm;
    time_t operator()(const std::string&amp; period)
    {
        if(strptime(period_datetime[i].c_str(), &quot;%Y-%m-%d %H:%M:%S&quot;, &amp;se_period_tm) == NULL) 
            return time_t(-1); 
        else { 
            time_t t = mktime(&amp;se_period_tm);
            if(&amp;se_period_tm &lt; 0)  
               return time_t(-1); 
            else 
               return t; 
        }
    }
};

int main()
{
    using namespace std;
    vector&lt;std::string&gt; p(3);
    vector&lt;time_t&gt; times;
    times.reserve(p.size());

    transform(p.begin(), p.end(), back_inserter(times), make_period_time()); 

    return 0;
}
</code></pre>
<p>Man kann mit Compileroptimierung zwar auch einen vector&lt;time_t&gt; effektiv zurückgeben, doch ist so eine generische Lösung viel flexibler. Du könntest das Ergebnis z.B. mit dem gelichen Ansatz ganz woanders hinschreiben, zB in die Standardausgabe.</p>
<pre><code class="language-cpp">transform(p.begin(), p.end(), ostream_iterator&lt;time_t&gt;(cout,&quot;\n&quot;), make_period_time());
</code></pre>
<p>Zuletzt sei nochmal boost::date_time erwähnt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892633</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 05 May 2010 11:08:15 GMT</pubDate></item><item><title><![CDATA[Reply to funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar.. on Wed, 05 May 2010 10:15:56 GMT]]></title><description><![CDATA[<p>strptime macht aus einem string ein tm struct (und im endeffekt die zeit time in sek seit 1970..)</p>
<p><strong>zu1:</strong><br />
die funktion bekommt z.b. 14:10 Uhr und 18:00 (%H:%M) als array übergeben und macht daraus jeweils eine time in sek seit 1970..</p>
<p>dabei füge ich den aktuellen tag(%Y-%m-%d) zur periode start oder end hinzu, mache eine time draus und kann später prüfen ob tnow innerhalb der periode_Start und end liegt... also ob der zeitraum geerade aktuell ist oder nicht geprüft werden soll...</p>
<p>zur info: ich führe die funktion zweimal aus.. einmal für das array das die startzeit der zeiträume(14:00-20:00, also hier 14:00) enthält und einmal für das ende des zeitraumes(also 20:00), wie gesagt können es insgesamt mehrere zeiträume sein die ich prüfen muss(14:00-20:00, 20:00-22:00, etc.)</p>
<p><strong>zu2</strong><br />
hat sich.. ich hab die zeit nun nur noch als long int vorliegen</p>
<p><strong>zu3</strong><br />
time_t ist hier ein array... wieso sollte das nicht funktioniere? (es funktioniert ja und ich bekomme exakt die werte zurück die ich brauche..)</p>
<p><strong>zu deinen Bsp.:</strong><br />
<em>In Bsp 1</em> komme ich noch halbwegs klar, wobei ich das für meine Kenntnisse schon etwas zu kompliziert finde( da komme ich mit meinem beispiel besser klar, und macht ja im Endeffekt das selbe..)</p>
<p><em>In Bsp 2</em> sehe ich erst gar kein array ? Da stoße ich an meine Grenzen was das Verständis anbelangt, (transform, struct ussw.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892645</guid><dc:creator><![CDATA[taurus]]></dc:creator><pubDate>Wed, 05 May 2010 10:15:56 GMT</pubDate></item><item><title><![CDATA[Reply to funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar.. on Wed, 05 May 2010 11:12:51 GMT]]></title><description><![CDATA[<p>Zu3: nein es funktioniert nicht. Vielleicht einfach mal kompilieren. Die Größe des Ararys <code>se_period_time</code> muss zur Übersetzungszeit bekannt sein. Aber eigentlich brauchst du das Ding auch gar nicht. Hast es ja eigentlich schon ganz richtig durch einen vector ersetzt.</p>
<p>Im 2.Bsp habe ich einen vector&lt;string&gt; mit 3 (hier leeren) Strings und einen leeren vector&lt;time_t&gt; wo die Ergebnisse reinkommen.<br />
Die (Template-)Funtion std::transform nimmt alle Elemente vom Anfang bis zum Ende vom Stringvector, macht mit Hilfe des make_period_time structs ein time_t daraus und speichert das im timevector. Da die Eingabeiteratoren(p.begin(), p.end()) und Ausgabeiteratoren (hier ein insert_iterator) Templateparameter der transform Funktion sind, können Quelle und Ziel (und auch das struct das aus einem string ein time_t macht) beliebig ausgetauscht werden. Die strings können z.B. auch aus einer liste stammen (was in deiner Funktione größere Änderungen benötigt, da list keinen RandomAccess [] operator hat) und die Ergebniss wie ganz am Ende gezeigt in die Standardausgabe cout kopiert werden. Genauso könnte man die strings mit einem istream_iterator aus der Eingabe einlesen oder oder oder.</p>
<p>Du kannst Dir mal Templates und das Iteratorkonzept ansehen, falls Dich das interessiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892661</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Wed, 05 May 2010 11:12:51 GMT</pubDate></item><item><title><![CDATA[Reply to funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar.. on Wed, 05 May 2010 18:26:40 GMT]]></title><description><![CDATA[<p>das werde ich mir anschauen wenn das tool final fertig ist...</p>
<p>dann werde ich nämlich schauen wie ich den code vereinfachen kann...</p>
<blockquote>
<p>Die strings können z.B. auch aus einer liste stammen (was in deiner Funktione größere Änderungen benötigt, da list keinen RandomAccess [] operator hat)</p>
</blockquote>
<p>was meinst du mit aus einer liste kommen? im moment gebe ich der funktion ja teile von zeiträumen also(14:00 und 20:00 und 22:00) als array.. die funktion rufe ich dan nochmal für das ende der zeiträume auf, sodass ich f+r jeden zeitraum start und endpunkt als time erhalte..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1892982</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1892982</guid><dc:creator><![CDATA[taurus]]></dc:creator><pubDate>Wed, 05 May 2010 18:26:40 GMT</pubDate></item><item><title><![CDATA[Reply to funktion gibt zeiger auf time_t zurück + variable nur lokal(also in funktion) verfügbar.. on Thu, 06 May 2010 05:40:15 GMT]]></title><description><![CDATA[<p>Im moment übergibst du einen <code>vector&lt;std::string&gt;</code> .<br />
Vielleicht stellst du in einer Woceh fest, dass Du die strings viel besser in einer std::list unterbringst. Dann musst du entweder vor dem Aufruf der Funktion alles in einen vector kopieren, oder die Funktion umschreiben, da <code>std::list</code> keinen []operator hat und die for Schleife nicht funktioniert. Daher nimmt man besser Iteratoren, die alle Container haben.<br />
Genauso der Rückgabetyp. Du legst dich hier auf vector&lt;time_t&gt; fest. Wenn du nächste Woche das ganze in einem set&lt;time_t&gt; haben möchtest, musst du den Rückgabetyp ändern und die Funtkion umschreiben, da set keine push_back Methode hat.<br />
Meine Lösung funktioniert für jede Quelle und jedes Ziel, das Iteratoren unterstützt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1893116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1893116</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Thu, 06 May 2010 05:40:15 GMT</pubDate></item></channel></rss>