<?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[c_str funktionier nicht]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe folgenden code:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;test.h&quot;

#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;mysql++.h&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

using namespace std;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WIN32_LEAN_AND_MEAN
#define MT4_EXPFUNC __declspec(dllexport)

#define DB_HOST     &quot;localhost&quot;
#define DB_USERNAME &quot;root&quot;
#define DB_PASSWORD &quot;********&quot;
#define DB_DATABASE &quot;plankson&quot;

#pragma pack(push,1)
struct MqlStr { int len; const char* string; };
#pragma pack(pop)

MT4_EXPFUNC void __stdcall DLL_Test(MqlStr * Result)
{
	mysqlpp::Connection conn(false);
	if (conn.connect(DB_DATABASE, DB_HOST, DB_USERNAME, DB_PASSWORD)) {
		mysqlpp::Query query = conn.query();
		query &lt;&lt; &quot;SET NAMES 'utf8'&quot;;
		query.execute();

		query &lt;&lt; &quot;SELECT * FROM indicators&quot;;

		int i = 0;

		if (mysqlpp::StoreQueryResult res = query.store()) {
			mysqlpp::StoreQueryResult::const_iterator it;
			for (it = res.begin(); it != res.end(); ++it) {
				mysqlpp::Row row = *it;

				Result[i].string = row[1].c_str();

				i++;
			}
		}
	}
}
</code></pre>
<p>leider steht in der Result[n] immer nur ein komisches zeichen, jedoch nicht der erwartete string.</p>
<p>Result[n] wird nicht in C++ weiterverarbeitet, sondern in einer anderen sprache die call-by-reference unterstützt.</p>
<p>woran liegt das?</p>
<p>danke.</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/293072/c_str-funktionier-nicht</link><generator>RSS for Node</generator><lastBuildDate>Sun, 16 Aug 2026 14:04:34 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/293072.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 24 Sep 2011 22:01:22 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to c_str funktionier nicht on Sat, 24 Sep 2011 22:02:39 GMT]]></title><description><![CDATA[<p>Hallo Leute,</p>
<p>habe folgenden code:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;test.h&quot;

#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;mysql++.h&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

using namespace std;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WIN32_LEAN_AND_MEAN
#define MT4_EXPFUNC __declspec(dllexport)

#define DB_HOST     &quot;localhost&quot;
#define DB_USERNAME &quot;root&quot;
#define DB_PASSWORD &quot;********&quot;
#define DB_DATABASE &quot;plankson&quot;

#pragma pack(push,1)
struct MqlStr { int len; const char* string; };
#pragma pack(pop)

MT4_EXPFUNC void __stdcall DLL_Test(MqlStr * Result)
{
	mysqlpp::Connection conn(false);
	if (conn.connect(DB_DATABASE, DB_HOST, DB_USERNAME, DB_PASSWORD)) {
		mysqlpp::Query query = conn.query();
		query &lt;&lt; &quot;SET NAMES 'utf8'&quot;;
		query.execute();

		query &lt;&lt; &quot;SELECT * FROM indicators&quot;;

		int i = 0;

		if (mysqlpp::StoreQueryResult res = query.store()) {
			mysqlpp::StoreQueryResult::const_iterator it;
			for (it = res.begin(); it != res.end(); ++it) {
				mysqlpp::Row row = *it;

				Result[i].string = row[1].c_str();

				i++;
			}
		}
	}
}
</code></pre>
<p>leider steht in der Result[n] immer nur ein komisches zeichen, jedoch nicht der erwartete string.</p>
<p>Result[n] wird nicht in C++ weiterverarbeitet, sondern in einer anderen sprache die call-by-reference unterstützt.</p>
<p>woran liegt das?</p>
<p>danke.</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123335</guid><dc:creator><![CDATA[tomplank]]></dc:creator><pubDate>Sat, 24 Sep 2011 22:02:39 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sat, 24 Sep 2011 22:14:11 GMT]]></title><description><![CDATA[<p>c_str() liefert einen Zeiger in die interne Datenrepräsentation des Strings. Der wird natürlich ungültig, wenn der String neuen Speicher anfordert oder aus dem Scope fällt. Wenn du willst, daß die Daten unabhängig vom String weiterleben, mußt du schon eigenen Speicher anfordern und per copy() füllen.<br />
(und die Freigabe nicht vergessen)</p>
<p>PS: Ich hoffe, der Funktionsparameter zeigt auf ein ausreichen großes Array, um alle selektierten Werte reinpacken zu können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123341</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123341</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 24 Sep 2011 22:14:11 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sat, 24 Sep 2011 22:49:15 GMT]]></title><description><![CDATA[<p>Vielen dank.</p>
<p>Komisch ist aber, dass wenn ich result per cout ausgebe funktionierts, nur wenn ich die result vom hauptprogramm aufrufe gehts nicht. Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123364</guid><dc:creator><![CDATA[tomplank]]></dc:creator><pubDate>Sat, 24 Sep 2011 22:49:15 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sat, 24 Sep 2011 22:55:37 GMT]]></title><description><![CDATA[<p>tomplank schrieb:</p>
<blockquote>
<p>Komisch ist aber, dass wenn ich result per cout ausgebe funktionierts, nur wenn ich die result vom hauptprogramm aufrufe gehts nicht. Danke</p>
</blockquote>
<p>Wo gibst du es denn aus, etwa direkt nach der Zuweisung? An er Stelle ist klar, daß es funktioniert - dort existiert der String auch noch und der Zeiger ist auch noch gültig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123366</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123366</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 24 Sep 2011 22:55:37 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sat, 24 Sep 2011 23:12:26 GMT]]></title><description><![CDATA[<p>Du bist anscheinend ein Profi, ich nur ein Anfänger.</p>
<p>Also meinst du ich sollte es in etwa so machen:</p>
<pre><code class="language-cpp">strcpy(Result[0].string, row[1].c_str());
</code></pre>
<p>Danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123369</guid><dc:creator><![CDATA[tomplank]]></dc:creator><pubDate>Sat, 24 Sep 2011 23:12:26 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sat, 24 Sep 2011 23:23:33 GMT]]></title><description><![CDATA[<p>Ja, wenn du vorher dafür gesorgt hast, daß Result[0].string auf einen ausreichend großen Speicherbereich verweist (mindestens row[1].size()+1 Zeichen), sollte das klappen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123373</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sat, 24 Sep 2011 23:23:33 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sun, 25 Sep 2011 09:38:21 GMT]]></title><description><![CDATA[<p>Hallo Profis,</p>
<p>habs jetzt so gemacht, leider ist das Problem noch immer das selbe:</p>
<pre><code class="language-cpp">#include &quot;stdafx.h&quot;
#include &quot;test.h&quot;

#include &lt;string&gt;
#include &lt;cstring&gt;
#include &lt;mysql++.h&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;

using namespace std;

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

#define WIN32_LEAN_AND_MEAN
#define MT4_EXPFUNC __declspec(dllexport)

#define DB_HOST     &quot;localhost&quot;
#define DB_USERNAME &quot;root&quot;
#define DB_PASSWORD &quot;********&quot;
#define DB_DATABASE &quot;plankson&quot;

#pragma pack(push,1)
struct MqlStr { int len; const char* string; };
#pragma pack(pop)

MT4_EXPFUNC void __stdcall DLL_Test(MqlStr * Result)
{
	mysqlpp::Connection conn(false);
	if (conn.connect(DB_DATABASE, DB_HOST, DB_USERNAME, DB_PASSWORD)) {
		// Retrieve a subset of the sample stock table set up by resetdb
		// and display it.
		mysqlpp::Query query = conn.query();
		query &lt;&lt; &quot;SET NAMES 'utf8'&quot;;
		query.execute();

		query &lt;&lt; &quot;SELECT * FROM indicators&quot;;

		int i = 0;

		if (mysqlpp::StoreQueryResult res = query.store()) {
			cout &lt;&lt; &quot;We have:&quot; &lt;&lt; endl;
			mysqlpp::StoreQueryResult::const_iterator it;
			for (it = res.begin(); it != res.end(); ++it) {
				mysqlpp::Row row = *it;

				const char * tt = new char[row[1].size() + 1];
				tt = row[1].c_str();

				Result[i].string = tt;

				i++;
			}
		}
	}
}
</code></pre>
<p>danke und lg aus tirol</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123410</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123410</guid><dc:creator><![CDATA[tomplank]]></dc:creator><pubDate>Sun, 25 Sep 2011 09:38:21 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sun, 25 Sep 2011 18:14:14 GMT]]></title><description><![CDATA[<blockquote>
<pre><code class="language-cpp">const char * tt = new char[row[1].size() + 1];
tt = row[1].c_str();
</code></pre>
</blockquote>
<p>Das ist ja auch genauso falsch wie bisher - zusätzlich ergänzt um ein Speicherleck, weil in der zweiten Zeile die Adresse des angeforderten Speichers überschrieben wird (und der Zeiger danach weiterhin in die internen Daten des Strings zeigt). Ersetz' diese Zeile doch durch deinen strcpy()-Aufruf (oder std::string::copy()).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2123561</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123561</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Sun, 25 Sep 2011 18:14:14 GMT</pubDate></item><item><title><![CDATA[Reply to c_str funktionier nicht on Sun, 25 Sep 2011 18:22:41 GMT]]></title><description><![CDATA[<p>Dieser Thread wurde von Moderator/in <a href="http://www.c-plusplus.net/forum/u18038" rel="nofollow">CStoll</a> aus dem Forum <a href="http://www.c-plusplus.net/forum/f1" rel="nofollow">MFC (Visual C++)</a> in das Forum <a href="http://www.c-plusplus.net/forum/f15" rel="nofollow">C++ (auch C++0x)</a> verschoben.</p>
<p>Im Zweifelsfall bitte auch folgende Hinweise beachten:<br />
<a href="http://www.c-plusplus.net/forum/39405" 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/2123565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2123565</guid><dc:creator><![CDATA[C++ Forumbot]]></dc:creator><pubDate>Sun, 25 Sep 2011 18:22:41 GMT</pubDate></item></channel></rss>