<?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[[erledigt]Problem mit Bilder laden und strcmp]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich versuche derzeitig, einen Magier vollständig für eine Animation zu laden. Dafür habe ich eine Ressourcen-Datei, die Graphiken etc. verwalten soll. Zu ihr gehört u.a. die Funktion zum Bilder laden:</p>
<pre><code class="language-cpp">graphikinfo ress::hinzrs(char rs[256])  
{  
  std::cout  &lt;&lt; &quot;ress::hinzrs rs : &quot; &lt;&lt; rs &lt;&lt; std::endl;  

  SDL_WM_SetCaption(rs,0);  

  graphikinfo tinfo;  
  for (int i=0;i&lt;maxid;++i)  
  {  
    std::cout &lt;&lt; &quot;ress::hinzrs rsarray[&quot;&lt;&lt;i&lt;&lt;&quot;].name : &quot; &lt;&lt; rsarray[i].name &lt;&lt; std::endl;  

    if (strcmp(rsarray[i].name,rs)==0 )  
    {  
      std::cout &lt;&lt; &quot;gleich&quot;  &lt;&lt; std::endl;  
      tinfo.graphikid=i;  
      tinfo.breite=rsarray[i].breite;  
      tinfo.hohe=rsarray[i].hohe;  
      return tinfo;  
    }  
  }
  SDL_Surface *temp;
  temp=SDL_LoadBMP(rs);
  if (temp==NULL) throw *SDL_GetError();
  rsarray[maxid].RS=temp;
  rsarray[maxid].hohe=temp-&gt;h;
  rsarray[maxid].breite=temp-&gt;w;
  rsarray[maxid].name=rs;
  SDL_SetColorKey(rsarray[maxid].RS, SDL_SRCCOLORKEY, SDL_MapRGB(rsarray[maxid].RS-&gt;format, 255, 0, 255));
  ++maxid;

  tinfo.graphikid=maxid-1;
  tinfo.hohe=temp-&gt;h;
  tinfo.breite=temp-&gt;w;

  return tinfo;
}
</code></pre>
<p>Insbesondere interresant ist dabei die Schleife am Anfang, sie sollte gleiche Bilder rausfiltern und so Speicher effektiver nutzen.</p>
<p>Nun versuche ich, eine Magieranimation vollständig zu laden:</p>
<pre><code class="language-cpp">for (int i=3;i&lt;13;++i)
  {
    sprintf(buffer, &quot;daten/magier/magic spelling se%04i.bmp&quot;, i);
    SDL_WM_SetCaption(buffer,0);
    G[i]=R-&gt;hinzrs(buffer);

  }
</code></pre>
<p>Mein Problem: es läd immer nur einen Magier, und dann wird dieser als gleich erkannt.</p>
<p>Die Testeingaben, die oben aufgeführt sind, geben folgendes aus(Bilder 1-3 werden anders geladen):</p>
<p>stdout.txt schrieb:</p>
<blockquote>
<p>ress::hinzrs rs : daten/magier/magic spelling se0004.bmp<br />
ress::hinzrs rsarray[0].name : daten/magier/magic spelling se0001.bmp<br />
ress::hinzrs rsarray[1].name : daten/magier/magic spelling se0002.bmp<br />
ress::hinzrs rsarray[2].name : daten/magier/magic spelling se0003.bmp<br />
ress::hinzrs rs : daten/magier/magic spelling se0005.bmp<br />
ress::hinzrs rsarray[0].name : daten/magier/magic spelling se0001.bmp<br />
ress::hinzrs rsarray[1].name : daten/magier/magic spelling se0002.bmp<br />
ress::hinzrs rsarray[2].name : daten/magier/magic spelling se0003.bmp<br />
ress::hinzrs rsarray[3].name : daten/magier/magic spelling se0005.bmp<br />
gleich</p>
</blockquote>
<p>Seltsamerweise wird hier zwar der richtige Name übergeben, aber die 4 scheint aus dem Speicher gelöscht zu sein, obwohl sie doch mit</p>
<pre><code class="language-cpp">rsarray[maxid].name=rs;
</code></pre>
<p>hereingeschrieben sein sollte.</p>
<p>Hat jemand eine Ahnung, wo der Fehler liegt? Ich beiße mir jetzt schon seit gestern Abend die Zähne daran aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/189110/erledigt-problem-mit-bilder-laden-und-strcmp</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 07:23:46 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/189110.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 08 Aug 2007 15:07:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 17:03:32 GMT]]></title><description><![CDATA[<p>Hallo Leute!</p>
<p>Ich versuche derzeitig, einen Magier vollständig für eine Animation zu laden. Dafür habe ich eine Ressourcen-Datei, die Graphiken etc. verwalten soll. Zu ihr gehört u.a. die Funktion zum Bilder laden:</p>
<pre><code class="language-cpp">graphikinfo ress::hinzrs(char rs[256])  
{  
  std::cout  &lt;&lt; &quot;ress::hinzrs rs : &quot; &lt;&lt; rs &lt;&lt; std::endl;  

  SDL_WM_SetCaption(rs,0);  

  graphikinfo tinfo;  
  for (int i=0;i&lt;maxid;++i)  
  {  
    std::cout &lt;&lt; &quot;ress::hinzrs rsarray[&quot;&lt;&lt;i&lt;&lt;&quot;].name : &quot; &lt;&lt; rsarray[i].name &lt;&lt; std::endl;  

    if (strcmp(rsarray[i].name,rs)==0 )  
    {  
      std::cout &lt;&lt; &quot;gleich&quot;  &lt;&lt; std::endl;  
      tinfo.graphikid=i;  
      tinfo.breite=rsarray[i].breite;  
      tinfo.hohe=rsarray[i].hohe;  
      return tinfo;  
    }  
  }
  SDL_Surface *temp;
  temp=SDL_LoadBMP(rs);
  if (temp==NULL) throw *SDL_GetError();
  rsarray[maxid].RS=temp;
  rsarray[maxid].hohe=temp-&gt;h;
  rsarray[maxid].breite=temp-&gt;w;
  rsarray[maxid].name=rs;
  SDL_SetColorKey(rsarray[maxid].RS, SDL_SRCCOLORKEY, SDL_MapRGB(rsarray[maxid].RS-&gt;format, 255, 0, 255));
  ++maxid;

  tinfo.graphikid=maxid-1;
  tinfo.hohe=temp-&gt;h;
  tinfo.breite=temp-&gt;w;

  return tinfo;
}
</code></pre>
<p>Insbesondere interresant ist dabei die Schleife am Anfang, sie sollte gleiche Bilder rausfiltern und so Speicher effektiver nutzen.</p>
<p>Nun versuche ich, eine Magieranimation vollständig zu laden:</p>
<pre><code class="language-cpp">for (int i=3;i&lt;13;++i)
  {
    sprintf(buffer, &quot;daten/magier/magic spelling se%04i.bmp&quot;, i);
    SDL_WM_SetCaption(buffer,0);
    G[i]=R-&gt;hinzrs(buffer);

  }
</code></pre>
<p>Mein Problem: es läd immer nur einen Magier, und dann wird dieser als gleich erkannt.</p>
<p>Die Testeingaben, die oben aufgeführt sind, geben folgendes aus(Bilder 1-3 werden anders geladen):</p>
<p>stdout.txt schrieb:</p>
<blockquote>
<p>ress::hinzrs rs : daten/magier/magic spelling se0004.bmp<br />
ress::hinzrs rsarray[0].name : daten/magier/magic spelling se0001.bmp<br />
ress::hinzrs rsarray[1].name : daten/magier/magic spelling se0002.bmp<br />
ress::hinzrs rsarray[2].name : daten/magier/magic spelling se0003.bmp<br />
ress::hinzrs rs : daten/magier/magic spelling se0005.bmp<br />
ress::hinzrs rsarray[0].name : daten/magier/magic spelling se0001.bmp<br />
ress::hinzrs rsarray[1].name : daten/magier/magic spelling se0002.bmp<br />
ress::hinzrs rsarray[2].name : daten/magier/magic spelling se0003.bmp<br />
ress::hinzrs rsarray[3].name : daten/magier/magic spelling se0005.bmp<br />
gleich</p>
</blockquote>
<p>Seltsamerweise wird hier zwar der richtige Name übergeben, aber die 4 scheint aus dem Speicher gelöscht zu sein, obwohl sie doch mit</p>
<pre><code class="language-cpp">rsarray[maxid].name=rs;
</code></pre>
<p>hereingeschrieben sein sollte.</p>
<p>Hat jemand eine Ahnung, wo der Fehler liegt? Ich beiße mir jetzt schon seit gestern Abend die Zähne daran aus...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340903</guid><dc:creator><![CDATA[DaGeRe]]></dc:creator><pubDate>Wed, 08 Aug 2007 17:03:32 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 15:11:00 GMT]]></title><description><![CDATA[<p>welcher typ ist</p>
<pre><code>rsarray[maxid].name
</code></pre>
<p>? zufaellig const char*?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340910</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Wed, 08 Aug 2007 15:11:00 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 15:12:16 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/profile-var-mode-is-viewprofile-and-u-is-5577.html" rel="nofollow">rapso</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-7.html" rel="nofollow">Spiele-/Grafikprogrammierung</a> in das Forum <a href="http://www.c-plusplus.net/forum/viewforum-var-f-is-15.html" rel="nofollow">C++</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-39405.html" rel="nofollow">C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?</a></p>
<p><em>Dieses Posting wurde automatisch erzeugt.</em></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340911</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Wed, 08 Aug 2007 15:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 15:13:22 GMT]]></title><description><![CDATA[<p>Nein, ein ganz normaler char*. Er gehört zu folgendem struct:</p>
<pre><code class="language-cpp">struct intern_graphikinfo
{
  int graphikid, hohe, breite;
  char *name;
  SDL_Surface *RS;
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1340913</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340913</guid><dc:creator><![CDATA[DaGeRe]]></dc:creator><pubDate>Wed, 08 Aug 2007 15:13:22 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 15:25:27 GMT]]></title><description><![CDATA[<p>warum arbeitest du nicht durchgehen mit Standard-Lib? =&gt; std::string ...<br />
hast insgesammt viele möglichkeiten für Speicherüberläufe drin ..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340924</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 08 Aug 2007 15:25:27 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 15:31:56 GMT]]></title><description><![CDATA[<p>Das wäre in diesem Fall nicht großartig sinnvoll, zumindest am Ort des eigentlichen Fehlers. Denn SDL_LoadBMP nimmt nun mal nen char*, und keinen std::string. Und ob ich nun strcmp(rs, rsarray[i].name) oder rs==rsarray[i].name schreibe ist ja nicht weiter wichtig.<br />
Das Problem ist ja wahrscheinlich irgendwo in der Verwaltung des Arrays oder so...oder um ehrlich zu sein, ich hab keinen Plan, wo der Fehler liegt, deshalb hab ich ja hier das Thema verfasst...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340929</guid><dc:creator><![CDATA[DaGeRe]]></dc:creator><pubDate>Wed, 08 Aug 2007 15:31:56 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 16:53:57 GMT]]></title><description><![CDATA[<p>guck mal, hättest du std::string genommen, wäre dir DAS nicht passert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Als Parameter übergibst du ein char-array, das ist eigentlich ein char*. Der Zeiger ist gültig, bis die Funktion wieder verlassen wird. In der Funktion weißt du mit</p>
<p>rsarray[maxid].name=rs;</p>
<p>deinem länger lebenenden Array die Addresse! des Namens zu. Du kopierst also nicht den Namen, sondern nur die Adresse. Wenn die funktion verlassen wird, zeigt rsarray[maxid].name sonstwohin und enthält nicht mehr deinen Namen.</p>
<p>Lösung:</p>
<pre><code class="language-cpp">struct intern_graphikinfo
{
  int graphikid, hohe, breite;
  char name[512];   // hier muss der speicher selbst reserviert werden, damit er bleibt und nciht bei funktionsende weggeht
  SDL_Surface *RS;
};
// in funktion:
//anstatt 
rsarray[maxid].name=rs;

// das hier:
strcpy(rsarray[maxid].name, rs);
</code></pre>
<p>Aber nochmal: Nimm std::string, das is viel besser. Damit hast du soen probleme nciht mehr, weil die kopierkonstruktor hat und alles in ordnung ist. Und wenn SDL_LoadSonstwas einen char* erwartet, dann machst du einfach ein string::c_str() und schon hast du deinen char*.</p>
<p>Also, weg vom char*, hin zum std::string <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340988</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340988</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Wed, 08 Aug 2007 16:53:57 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Wed, 08 Aug 2007 17:04:52 GMT]]></title><description><![CDATA[<p>Danke, das war natürlich die Lösung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Hab schon damit begonnen, std::string zu lernen, so grob, aber komplett meine Programme umstellen wird wohl noch ein bisschen dauern...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1340995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1340995</guid><dc:creator><![CDATA[DaGeRe]]></dc:creator><pubDate>Wed, 08 Aug 2007 17:04:52 GMT</pubDate></item><item><title><![CDATA[Reply to [erledigt]Problem mit Bilder laden und strcmp on Thu, 09 Aug 2007 06:50:06 GMT]]></title><description><![CDATA[<p>die zeit diese grundlagen zu lernen solltest du dir nehmen, sonst wirst du weiterhin diese fehler haben die dich unnoetig aufhalten (und viel mehr zeit kosten als ein wenig lernen).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1341205</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1341205</guid><dc:creator><![CDATA[rapso]]></dc:creator><pubDate>Thu, 09 Aug 2007 06:50:06 GMT</pubDate></item></channel></rss>