<?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[Bad Pointer nach sprintf]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class Test
{
public:
	Test(void);
	Test(char* str);
	~Test(void);
	void getTo(char &amp;res);

private:
	char* from;
	char* to;	
};
</code></pre>
<p>im Konstruktor Test(char* str) wird str zerlegt und die variablen from und to gefüllt. Das mache ich so:</p>
<pre><code class="language-cpp">Test::Test(char* str)
{
	from = new char();
	to = new char();
	memcpy(from, &quot;test&quot;, 4);	
	from[4]='\0';
	memcpy(to, &quot;testxyz&quot;, 7);
   to[7]='\0';
}
</code></pre>
<p>in der Methode getTo(char &amp;res) soll dann &quot;To: &quot; und der Wert von to auf res geschrieben werden.</p>
<pre><code class="language-cpp">void Test::getTo(char &amp;res)
{

	sprintf(&amp;res, &quot;To: %s&quot;, to)
}
</code></pre>
<p>in res dann auch das was ich will allerdings ist to dann ein Bad Pointer.<br />
Ich möchte to aber noch in anderen Methoden der Klasse verwenden.<br />
Kann mir jemand sagen wo ich einen Fehler mache??<br />
Wenn ich</p>
<pre><code class="language-cpp">to = new char();
</code></pre>
<p>im Konstruktor weglasse gehts nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193595/bad-pointer-nach-sprintf</link><generator>RSS for Node</generator><lastBuildDate>Mon, 28 Sep 2026 03:39:20 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193595.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 27 Sep 2007 15:36:02 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Bad Pointer nach sprintf on Thu, 27 Sep 2007 15:36:02 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich habe folgende Klasse:</p>
<pre><code class="language-cpp">class Test
{
public:
	Test(void);
	Test(char* str);
	~Test(void);
	void getTo(char &amp;res);

private:
	char* from;
	char* to;	
};
</code></pre>
<p>im Konstruktor Test(char* str) wird str zerlegt und die variablen from und to gefüllt. Das mache ich so:</p>
<pre><code class="language-cpp">Test::Test(char* str)
{
	from = new char();
	to = new char();
	memcpy(from, &quot;test&quot;, 4);	
	from[4]='\0';
	memcpy(to, &quot;testxyz&quot;, 7);
   to[7]='\0';
}
</code></pre>
<p>in der Methode getTo(char &amp;res) soll dann &quot;To: &quot; und der Wert von to auf res geschrieben werden.</p>
<pre><code class="language-cpp">void Test::getTo(char &amp;res)
{

	sprintf(&amp;res, &quot;To: %s&quot;, to)
}
</code></pre>
<p>in res dann auch das was ich will allerdings ist to dann ein Bad Pointer.<br />
Ich möchte to aber noch in anderen Methoden der Klasse verwenden.<br />
Kann mir jemand sagen wo ich einen Fehler mache??<br />
Wenn ich</p>
<pre><code class="language-cpp">to = new char();
</code></pre>
<p>im Konstruktor weglasse gehts nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373956</guid><dc:creator><![CDATA[nala]]></dc:creator><pubDate>Thu, 27 Sep 2007 15:36:02 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Pointer nach sprintf on Thu, 27 Sep 2007 15:41:10 GMT]]></title><description><![CDATA[<p>Die Array-Syntax heisst ja auch new char[] und in den eckigen Klammern musst Du die Anzahl der zu reservierenden Zeichen angeben. Vorsicht: Du brauchst eins mehr als die Stringlänge, wegen der Nullterminierung.</p>
<p>Darüberhinaus übergibst Du der Funktion GetTo eine Referenz auf <strong>ein</strong> Zeichen, war das beabsichtigt? Jedenfalls dürfte der Schreibvorgang dann ziemlich schiefgehen. Wenn Du bei C-Strings bleiben willst, musst Du der Methode GetTo einen Zeiger auf ein Char-Array liefern (wie Du es mit new char[] erzeugt hast).</p>
<p>Andere Frage: Warum nutzt Du dafür nicht std::string?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373958</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373958</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 27 Sep 2007 15:41:10 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Pointer nach sprintf on Thu, 27 Sep 2007 15:48:10 GMT]]></title><description><![CDATA[<p>ich übergebe getTo eine Referenz auf ein char-array. Das habe ich vorher mit new char[] erzeugt.<br />
Was muss ich machen wenn ich beim erzeugen der Arrays die Größe nicht weiss??<br />
Ich hab zwar in diesem Fall &quot;test&quot; bzw. &quot;testxyz&quot; reingeschrieben, aber das soll aus einer Datei gelesen werden und dann kann es beliebig lang sein.</p>
<p>Hab jetzt mal new char() in new char[] geändert. Hab aber dann immernoch danach einen bad pointer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373961</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373961</guid><dc:creator><![CDATA[nala]]></dc:creator><pubDate>Thu, 27 Sep 2007 15:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Pointer nach sprintf on Thu, 27 Sep 2007 15:49:46 GMT]]></title><description><![CDATA[<p>nala schrieb:</p>
<blockquote>
<p>ich übergebe getTo eine Referenz auf ein char-array....</p>
</blockquote>
<p>Sorry, Zeiger mein ich</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373964</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373964</guid><dc:creator><![CDATA[nala]]></dc:creator><pubDate>Thu, 27 Sep 2007 15:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Pointer nach sprintf on Thu, 27 Sep 2007 16:10:08 GMT]]></title><description><![CDATA[<p>Falls du weiterhin char nutzen willst:</p>
<pre><code class="language-cpp">Test::Test(const char* ptr)
{
    std::size_t len = std::strlen(ptr) / 2 + 1;
    m_from = new char[len];
    std::strncpy(m_from, ptr, len - 1);
    len = std::strlen(ptr) - (len - 1) &gt; len ? len + 1 : len;
    m_to = new char[len];
    std::strncpy(m_to, &amp;ptr[len], len - 1);
}

Test::~Test()
{
    delete [] m_to;
    delete [] m_from;
}
</code></pre>
<p>...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373970</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Thu, 27 Sep 2007 16:10:08 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Pointer nach sprintf on Thu, 27 Sep 2007 16:12:57 GMT]]></title><description><![CDATA[<p>also nur mit char[] anlegen geht nicht, da eben die größe des arrays fehlt...</p>
<p>in deiner getToübergibst du eine referenz, dann kannst (mußt?) du das &quot;&amp;&quot; beim verwenden weglassen.</p>
<p>wieso nimmst du keinen string? macht das um einiges leichter ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1373972</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1373972</guid><dc:creator><![CDATA[qwer123]]></dc:creator><pubDate>Thu, 27 Sep 2007 16:12:57 GMT</pubDate></item><item><title><![CDATA[Reply to Bad Pointer nach sprintf on Fri, 28 Sep 2007 07:52:06 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>ich unterstütze:</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>...Andere Frage: Warum nutzt Du dafür nicht std::string?</p>
</blockquote>
<p>qwer123 schrieb:</p>
<blockquote>
<p>...<br />
wieso nimmst du keinen string? macht das um einiges leichter ^^</p>
</blockquote>
<p>Dann würde aus Deinem Code:</p>
<pre><code class="language-cpp">class Test
{
public:
   Test();
   Test(string const&amp; s) {	from = &quot;test&quot;;	to = &quot;testxyz&quot;; }
	// Alternativ mit &quot;Initialisierungsliste&quot; : Test(string const&amp; s) : from(&quot;test&quot;), to(&quot;testxy&quot;) {}
	string getTo() { return string(&quot;To: &quot;) + to; }
   // Destruktor brauchst Du gar nicht
private:
	string from, to;
};
</code></pre>
<p>Ist doch wohl kürzer, sicherer, einfacher, .... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Ach ja: Du schreibst:</p>
<p>nala schrieb:</p>
<blockquote>
<p>im Konstruktor Test(char* str) wird str zerlegt und die variablen from und to gefüllt.</p>
</blockquote>
<p>Davon sehe ich in Deinem Code nichts....</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1374191</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1374191</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 28 Sep 2007 07:52:06 GMT</pubDate></item></channel></rss>