<?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[Problem mit einem String der machmal auf einen Zeigt]]></title><description><![CDATA[<p>Hallo zusammen eigentlich geht es ja bestimmt um Pointer!<br />
habe mir jetzt schon etliche Pointer tutorials angeschaut aber blicke da immer noch nicht richtig durch oder es gibt wieder mal einen einfachen weg und ich versuche wieder den komplizierten!</p>
<p>Ich bin im addressraum des Programs und habe ein gefüllten Struct!</p>
<p>diesem Struct hat ein char[28] als member und er füllt sich auch meistens mit dem erforderlichen String! Jedoch wenn der String länger als 15 Zeichen ist ist anstelle des Strings ein pointer auf den string gegeben! Ich habe schon alles mögliche probiert um es zu filtern! evtl hat ja einer von euch eine Idee!</p>
<pre><code>struct bla
{
   ...    
   char[28] Name;
   ...
};

bla sBla;
PCHAR pName;

// also ich wil hier zuerst mal überprüfen das wenn es ein pointer ist den inhalt des pointers überprüfen ob er null ist

if ((PCHAR)*(sBla.Name[0]))
  pName = *(sBla.Name[0])
else
  pName = sBla.Name;
</code></pre>
<p>bei den meisten versuchen mittels &amp; und * erhalte ich entweder den verkrüppelten string oder einen fehler! ich weis wirklich nicht weiter! kann mir einer helfen bitte?</p>
<p>Vielen Dank im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/194278/problem-mit-einem-string-der-machmal-auf-einen-zeigt</link><generator>RSS for Node</generator><lastBuildDate>Tue, 29 Sep 2026 20:18:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/194278.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 Oct 2007 17:59:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Thu, 04 Oct 2007 17:59:15 GMT]]></title><description><![CDATA[<p>Hallo zusammen eigentlich geht es ja bestimmt um Pointer!<br />
habe mir jetzt schon etliche Pointer tutorials angeschaut aber blicke da immer noch nicht richtig durch oder es gibt wieder mal einen einfachen weg und ich versuche wieder den komplizierten!</p>
<p>Ich bin im addressraum des Programs und habe ein gefüllten Struct!</p>
<p>diesem Struct hat ein char[28] als member und er füllt sich auch meistens mit dem erforderlichen String! Jedoch wenn der String länger als 15 Zeichen ist ist anstelle des Strings ein pointer auf den string gegeben! Ich habe schon alles mögliche probiert um es zu filtern! evtl hat ja einer von euch eine Idee!</p>
<pre><code>struct bla
{
   ...    
   char[28] Name;
   ...
};

bla sBla;
PCHAR pName;

// also ich wil hier zuerst mal überprüfen das wenn es ein pointer ist den inhalt des pointers überprüfen ob er null ist

if ((PCHAR)*(sBla.Name[0]))
  pName = *(sBla.Name[0])
else
  pName = sBla.Name;
</code></pre>
<p>bei den meisten versuchen mittels &amp; und * erhalte ich entweder den verkrüppelten string oder einen fehler! ich weis wirklich nicht weiter! kann mir einer helfen bitte?</p>
<p>Vielen Dank im voraus!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378090</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378090</guid><dc:creator><![CDATA[Tetsuo]]></dc:creator><pubDate>Thu, 04 Oct 2007 17:59:15 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Thu, 04 Oct 2007 18:21:05 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich hab zwar das Problem nicht so ganz verstanden, aber wie füllst du denn den String?</p>
<p>Machst du &quot;Name = &quot;neuer String&quot;?</p>
<p>Vielleicht würde es dann schon helfen wenn du einfach die Funktion strcpy nutzt!</p>
<p>Viele Grüße<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378107</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Thu, 04 Oct 2007 18:21:05 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Thu, 04 Oct 2007 18:23:00 GMT]]></title><description><![CDATA[<p>Eine andere Möglicheit wäre auch std::string...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378110</guid><dc:creator><![CDATA[The-Kenny]]></dc:creator><pubDate>Thu, 04 Oct 2007 18:23:00 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Thu, 04 Oct 2007 18:36:58 GMT]]></title><description><![CDATA[<p>der char[28] wird von dem programm, in dem ich per plugin bin, gefüllt und ich lese ihn nur aus!</p>
<p>The-Kenny schrieb:</p>
<blockquote>
<p>Eine andere Möglicheit wäre auch std::string...</p>
</blockquote>
<p>meinst du ich sollte dem struct anstatt char[28] lieber string zuweisen? oder auf was beziehst du deine antwort</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378116</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378116</guid><dc:creator><![CDATA[Tetsuo]]></dc:creator><pubDate>Thu, 04 Oct 2007 18:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Thu, 04 Oct 2007 19:45:51 GMT]]></title><description><![CDATA[<p>nein, tut mir leid das ich micht so undeutlich ausgedrückt habe.</p>
<p>Ich hatte nur früher folgenden Fehler gemacht</p>
<pre><code class="language-cpp">char testString[256];
testString = &quot;hallo&quot;;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">char* testString = &quot;hallo1&quot;;
char* testString2 = testString;
</code></pre>
<p>wenn ich jetzt testString manipuliere, verändere ich auch gleichzeitig testString2</p>
<p>Ich programmier noch nicht so lange c++, aber vielleicht wäre das ja die Ursache einer deiner Probleme gewesen.</p>
<p>Viele Grüße<br />
Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378172</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378172</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Thu, 04 Oct 2007 19:45:51 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Fri, 05 Oct 2007 09:30:37 GMT]]></title><description><![CDATA[<p>Tetsuo schrieb:</p>
<blockquote>
<p>The-Kenny schrieb:</p>
<blockquote>
<p>Eine andere Möglicheit wäre auch std::string...</p>
</blockquote>
<p>meinst du ich sollte dem struct anstatt char[28] lieber string zuweisen?</p>
</blockquote>
<p>Na, verwende halt statt des Char-Arrays die std::string-Klasse.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378410</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Fri, 05 Oct 2007 09:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Fri, 05 Oct 2007 10:15:52 GMT]]></title><description><![CDATA[<p>Tetsuo schrieb:</p>
<blockquote>
<p>diesem Struct hat ein char[28] als member und er füllt sich auch meistens mit dem erforderlichen String! Jedoch wenn der String länger als 15 Zeichen ist ist anstelle des Strings ein pointer auf den string gegeben!</p>
</blockquote>
<p>Wo kriegst du denn dann den Pointer her, bzw <em>wie</em> ist der denn gegeben? Generell würde ich sagen (und das scheint ja auch dein Ansatz zu sein), dass du prüfst ob der Zeiger NULL ist; wenn ja, dann ist deine Zeichenkette wohl in dem char[28], wenn nicht, dann zeigt der Zeiger auf die Zeichenkette.<br />
Wenn ich dich richtig verstanden habe, bekommst du ja durch irgendeine Schnittstelle den char[28] gefüllt oder eben einen Pointer. Steht vielleicht in der Beschreibung der Schnittstelle etwas dazu?<br />
Und wenn du dann ermittelt hast, was von beiden den String enthält, würde ich ihn einer std::string-Variable zuweisen, also in etwa so:</p>
<pre><code class="language-cpp">string fertiger_string;

char str1[28];
char* str2;
// Austauschen mit der Schnittstelle, entweder str2 oder der Inhalt von str1 ist gültig

if ( str2 )
    fertiger_string = str2;
else
    fertiger_string = str1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1378462</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378462</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Fri, 05 Oct 2007 10:15:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Fri, 05 Oct 2007 11:12:04 GMT]]></title><description><![CDATA[<p>Das geht aber in die Hose, wenn du str2 nicht initialisierst.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378510</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378510</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Fri, 05 Oct 2007 11:12:04 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Fri, 05 Oct 2007 11:30:28 GMT]]></title><description><![CDATA[<p>Meinen Verständnis nach erhält man auch bei char[28] nur einen Zeiger auf das erste Element zurück. Man hat also so oder so nur einen Zeiger.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1378527</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1378527</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Fri, 05 Oct 2007 11:30:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Sat, 13 Oct 2007 14:07:18 GMT]]></title><description><![CDATA[<p>Das ist ja das problem! ich hab noch keine Ahnung oder besser gesagt noch keine Idee wie ich das überprüfen könnte ob jetzt ein pointer gegeben ist oder eine zeichenkette!</p>
<p>also ich hab mal versucht den char in dem struct umzuwandeln in ein string da mir das hier jemand geraten hat und habe dann da ich komplett nur mit char und nicht mit string arbeite den inhalt probiert umzuwandeln!</p>
<p>Allerding kamen immer noch verkrüppelte zeichen raus!</p>
<pre><code>struct bla
{
   ...    
   string Name;
   ...
};

bla sBla;
char pName[50]; //50 Zeichen sind völlig ausreichend für mich

strcpy(pName,sBla.Name.c_str());
</code></pre>
<p>Als ausgabe bekam ich aber jetzt die zeichenkette ab dem 5 Zeichen und wenn ein pointer gegeben ist kamen wieder irgendwelche ascii zeichen raus<br />
Jetzt meine frage stimmt es denn überhaupt das ein string wenn der Inhalt größer als 15 Zeichen ist ihn als pointer speichert? Der Typ string hat ja auch 28 Bytes zur verfügung also war es für den struct schon mal nicht verkehrt!<br />
aber die funktionsweise kenn ich nicht und weis auch nicht ob ich ihn korrekt umgewandelt habe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384424</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384424</guid><dc:creator><![CDATA[Tetsuo]]></dc:creator><pubDate>Sat, 13 Oct 2007 14:07:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Sat, 13 Oct 2007 17:00:23 GMT]]></title><description><![CDATA[<p>Wie die Klasse 'string' die interne zeichenkette verwaltet, kann dir völlig gleich sein.<br />
Es stimmt, daß einige Implementierungen bei kurzen Strings (&lt;16 Chars) dafür einen internen Puffer benutzen, anstatt die Daten auf den Heap zu legen.<br />
Aber für dich als Anwender der Klasse spielt das keine Rolle.</p>
<p>Ich nehme an, die Struktur 'bla' mit dem Namen ist nicht von dir.<br />
Aber anhand dieses Eintrags kann man es nicht herausfinden, sondern es muß in der Struktur noch ein anderes Member vom Typ 'char *' vorhanden sein. Dieser kann dann auf 0 (NULL) geprüft werden (oder aber ein zusätzliches Member mit der Länge des Strings).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384520</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Sat, 13 Oct 2007 17:00:23 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Sun, 14 Oct 2007 08:31:07 GMT]]></title><description><![CDATA[<p>ich habe jetzt eine lösung für mich gefunden! ich habe mal mir diesen string im speicher angeschaut und der wird folgendermaßen gespeichert!</p>
<pre><code>class CString
{
//28 Bytes werden im speicher für den string typ belegt
//wenn der inhalt &gt; 15 Zeichen ist wird der inhalt woanders gespeichert und der
//char* zeigt auf den Inhalt andernfalls ist der inhalt direkt ab anfang gespeichert
public: 
	//String typecast
	char* value;		//0000
	char unknown0[12];
	int size;		// 0010
	char unknown1[8];
};
</code></pre>
<p>jetzt habe ich meinen struct entsprechend geändert</p>
<pre><code>struct bla
{
   ...    
   CString Name;
   ...
};

bla sBla;
char pName[50]; //50 Zeichen sind völlig ausreichend für mich
</code></pre>
<p>Auslesen tue ich den jeweiligen Inhalt folgendermaßen!</p>
<pre><code>if (sBla.Name.size &gt; 15)
    strcpy_s(pName,50,sBla.Name.value);
else
    strcpy_s(pName,50,(PCHAR)&amp;sBla.name);
</code></pre>
<p>Diese Lösung ist für mich völlig ausreichend und funktioniert einwandfrei</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1384738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384738</guid><dc:creator><![CDATA[Tetsuo]]></dc:creator><pubDate>Sun, 14 Oct 2007 08:31:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit einem String der machmal auf einen Zeigt on Sun, 14 Oct 2007 15:05:36 GMT]]></title><description><![CDATA[<p>Entschuldige, aber die Lösung ist Schrott. Hör doch einfach auf das, was gesagt wird, und mach es richtig.</p>
<pre><code class="language-cpp">struct bla
{
   // …    
   std::tring Name;
   // …
};

bla sBla;
std::string name = &quot;Ich bin der Max&quot;;
sBla.Name = name;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1384955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1384955</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Sun, 14 Oct 2007 15:05:36 GMT</pubDate></item></channel></rss>