<?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[Sehr langer String]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich schicke über ein Socket mehrere MB an Daten. Dies geschieht nur mit einem send(...) beim Server und ein recv in einer while-Schleife beim Client.</p>
<p>Das Problem hier: Meine Strings (std::string) knacken nach ~&gt;5000000 Zeichen weg und haben dann nur noch 700000 Zeichen. Laut recv sind auch &gt;5000000 Zeichen angekommen.</p>
<pre><code class="language-cpp">char	strDataBuffer[1024]; // Unsere Daten

	// Alle Pakete empfangen
	size_t bytes_rec = 0;
	size_t bytes_recv_total = 0;
	std::string str_rec;

	do
	{
		memset(strDataBuffer, 0, 1024);
		bytes_rec = recvfrom(_sock, strDataBuffer, 1023, 0, 0, 0);
		str_rec += strDataBuffer;
		bytes_recv_total += bytes_rec;
	}
	while(bytes_rec != 0);
</code></pre>
<p>str_rec hat danach aber gerade mal wie oben beschrieben ~15% der Daten.<br />
Da max_size von std::string nen int32 ist, denke ich nicht, dass ich hier über diese Grenze so einfach komme. Daher gibt es noch andere Möglichkeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/305426/sehr-langer-string</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 22:12:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/305426.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Jun 2012 16:38:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 16:38:11 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich schicke über ein Socket mehrere MB an Daten. Dies geschieht nur mit einem send(...) beim Server und ein recv in einer while-Schleife beim Client.</p>
<p>Das Problem hier: Meine Strings (std::string) knacken nach ~&gt;5000000 Zeichen weg und haben dann nur noch 700000 Zeichen. Laut recv sind auch &gt;5000000 Zeichen angekommen.</p>
<pre><code class="language-cpp">char	strDataBuffer[1024]; // Unsere Daten

	// Alle Pakete empfangen
	size_t bytes_rec = 0;
	size_t bytes_recv_total = 0;
	std::string str_rec;

	do
	{
		memset(strDataBuffer, 0, 1024);
		bytes_rec = recvfrom(_sock, strDataBuffer, 1023, 0, 0, 0);
		str_rec += strDataBuffer;
		bytes_recv_total += bytes_rec;
	}
	while(bytes_rec != 0);
</code></pre>
<p>str_rec hat danach aber gerade mal wie oben beschrieben ~15% der Daten.<br />
Da max_size von std::string nen int32 ist, denke ich nicht, dass ich hier über diese Grenze so einfach komme. Daher gibt es noch andere Möglichkeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228211</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228211</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Thu, 28 Jun 2012 16:38:11 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 16:48:14 GMT]]></title><description><![CDATA[<p>Sollte es tatsächlich an der Kapazität des Strings scheitern, könntest Du einfach nach 3MB in einen neuen String schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228214</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228214</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Thu, 28 Jun 2012 16:48:14 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 16:57:06 GMT]]></title><description><![CDATA[<p>Nimm doch einen <code>std::vector&lt;std::array&lt;char, 1023&gt;&gt;</code> . Dann ersparst du dir auch noch das kopieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228217</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228217</guid><dc:creator><![CDATA[indirektor]]></dc:creator><pubDate>Thu, 28 Jun 2012 16:57:06 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:01:43 GMT]]></title><description><![CDATA[<p>Sieht nach UDP aus, da ist ein Ankommen der Pakete gar nicht garantiert. Ist hier aber nicht das größte Problem.</p>
<pre><code class="language-cpp">str_rec += strDataBuffer;
</code></pre>
<p>Woher soll <code>+=</code> die Anzahl der gerade empfangenen Bytes kennen?</p>
<pre><code class="language-cpp">recvfrom(_sock, strDataBuffer, 1023, 0, 0, 0);
</code></pre>
<p>Du meinst wohl 1024.</p>
<p>EDIT: Ah ich verstehe. Du versendest ASCII oder so und verwendest deswegen Nullterminierung.</p>
<p>indirektor schrieb:</p>
<blockquote>
<p>Nimm doch einen <code>std::vector&lt;std::array&lt;char, 1023&gt;&gt;</code> . Dann ersparst du dir auch noch das kopieren.</p>
</blockquote>
<p>Spar dir doch das Posten solchen Schwachsinns.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228218</guid><dc:creator><![CDATA[TyRoXx]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:01:43 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 16:59:16 GMT]]></title><description><![CDATA[<p>str_rec += strDataBuffer;</p>
<p>Was wenn in strDataBuffer eine 0 vorkommt?</p>
<p>und recvfrom heisst UDP und UDP garantiert dir die Uebertragung nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228219</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 28 Jun 2012 16:59:16 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:05:23 GMT]]></title><description><![CDATA[<p>TyRoXx schrieb:</p>
<blockquote>
<p>Sieht nach UDP aus, da ist ein Ankommen der Pakete gar nicht garantiert. Ist hier aber nicht das größte Problem.</p>
<pre><code class="language-cpp">str_rec += strDataBuffer;
</code></pre>
<p>Woher soll <code>+=</code> die Anzahl der gerade empfangenen Bytes kennen?</p>
</blockquote>
<p>Muss es das?(ernstgemeinte Frage) Bisher hatte es bei Dateien unter 1MB geklappt. Ich weiß nicht genau wie der operator += definiert ist, aber durch das memset davor, passt es doch (insofern die 0 als Delimiter dient)?</p>
<p>TyRoXx schrieb:</p>
<blockquote>
<pre><code class="language-cpp">recvfrom(_sock, strDataBuffer, 1023, 0, 0, 0);
</code></pre>
<p>Du meinst wohl 1024.</p>
</blockquote>
<p>Eh sollte 1024 werden. Ich habe nen define dafür. Wollte aber (da unwichtig) hier nicht posten und habe mich verschrieben.</p>
<p>Und die Sache wird per TCP geschickt (nur per localhost). Ich weiß deshalb, dass alles angekommen ist, da die erhaltenen Bytes der Größe der Originaldatei entsprechen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228222</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228222</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:05:23 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:32:03 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>str_rec += strDataBuffer;</p>
<p>Was wenn in strDataBuffer eine 0 vorkommt?</p>
<p>und recvfrom heisst UDP und UDP garantiert dir die Uebertragung nicht...</p>
</blockquote>
<p>Dann ist die 0 aber ein char. Und die '0' ist sozusagen eine 48 als int. Gibt also daher eig. keine Probleme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228231</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228231</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:32:03 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:32:39 GMT]]></title><description><![CDATA[<p>SoM meint der char-Wert 0.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228232</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228232</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:32:39 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:38:25 GMT]]></title><description><![CDATA[<p>Was passiert den in diesem Fall? Wäre dies dann die Nullterminierung, so dass ich die nachfolgenden Zeichen vergessen kann (da operator += bis \0 durchläuft)?</p>
<p>Anscheinend hatte ich bisher mit meinen Dateien soviel Glück, dass mir dieser Fall nicht untergekommen ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228234</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228234</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:38:25 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:42:13 GMT]]></title><description><![CDATA[<p>build schrieb:</p>
<blockquote>
<p>Was passiert den in diesem Fall? Wäre dies dann die Nullterminierung, so dass ich die nachfolgenden Zeichen vergessen kann (da operator += bis \0 durchläuft)?</p>
</blockquote>
<p>Ja.<br />
deshalb:<br />
str_rec.append(strDataBuffer, bytes_rec);</p>
<p>wobei es natuerlich besser waere das ganze ohne kopieren zu machen.<br />
Und nebenbei bemerkt: du checkst nicht auf Fehler beim recvfrom.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228237</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228237</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:42:13 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:43:42 GMT]]></title><description><![CDATA[<p>build schrieb:</p>
<blockquote>
<p>Was passiert den in diesem Fall? Wäre dies dann die Nullterminierung, so dass ich die nachfolgenden Zeichen vergessen kann (da operator += bis \0 durchläuft)?</p>
</blockquote>
<p>Ja. Bzw: Ich glaube, es gibt gar keinen operator += (char const*), sondern nur einen operator += (string), bei dem die implizite Konvertierung über den Konvertierungs-Ctor greift. Aber für den Code ist das letztendlich egal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228239</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228239</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:43:42 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 17:45:49 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Ich glaube, es gibt gar keinen operator += (char const*)</p>
</blockquote>
<p>doch.<br />
das ist std::string.<br />
da gibts alles.</p>
<p>in manchen Implementierungen gibts auch eine koche_kaffee() Funktion.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228240</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 28 Jun 2012 17:45:49 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 18:07:08 GMT]]></title><description><![CDATA[<p>Ich bin jetzt soweit:</p>
<pre><code class="language-cpp">#define MAX_PACKET_SIZE 1024
.
.
.
	char	strDataBuffer[MAX_PACKET_SIZE]; // Unsere Daten

	// Alle Pakete empfangen
	size_t bytes_rec = 0;
	size_t bytes_recv_total = 0;
	std::string str_rec;
	std::list&lt;std::string&gt; str_list;

	do
	{
		memset(strDataBuffer, 0, MAX_PACKET_SIZE);
		bytes_rec = recvfrom(_sock, strDataBuffer, MAX_PACKET_SIZE, 0, 0, 0);

		// Alles gut gelaufen?
		if(bytes_rec == SOCKET_ERROR)
			return; // Na toll, ein Fehler

		str_rec.append(strDataBuffer);

		// Bei zuvielen Zeichen, den aktuellen String in eine Liste einfuegen
		// Danach leeren
		if(str_rec.length() &gt;= str_rec.max_size()-MAX_PACKET_SIZE) 
		{
			str_list.push_back(str_rec);	// Hinten anfügen
			str_rec.clear();			
		}

		bytes_recv_total += bytes_rec;
	}
	while(bytes_rec != 0);
</code></pre>
<p>Jetzt bin ich soweit, dass ich aus diesen vielen Teilstrings einen großen CString erstellen möchte.<br />
Deshalb würde dieser Ansatz gehen?</p>
<pre><code class="language-cpp">char *buffer = new char[bytes_rec];	// Ausgabepuffer
	memset(buffer, 0, bytes_rec);

	for(std::list&lt;std::string&gt;::const_iterator it = str_list.begin(); it != str_list.end(); it++)
	{
		sprintf(buffer, &quot;%s%s&quot;, buffer, it-&gt;c_str());
	}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2228248</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228248</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Thu, 28 Jun 2012 18:07:08 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Thu, 28 Jun 2012 18:38:06 GMT]]></title><description><![CDATA[<p>str_rec.append(strDataBuffer);</p>
<p>da hast du immernoch das selbe Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228256</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Thu, 28 Jun 2012 18:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 07:29:35 GMT]]></title><description><![CDATA[<p>Habs jetzt so gelöst und es funktioniert zumindest teilweise:</p>
<pre><code class="language-cpp">for(int i = 0; i &lt; MAX_PACKET_SIZE; i++)
	str_rec += strDataBuffer[i];
</code></pre>
<p>Bei Textdateien funktioniert dies wunderbar. Bei einem 4MB großen Bild, bekomme ich 1,5KB zuviel. Kann dies immernoch am operator+= liegen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228314</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Fri, 29 Jun 2012 07:29:35 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 07:35:31 GMT]]></title><description><![CDATA[<p>build schrieb:</p>
<blockquote>
<pre><code class="language-cpp">for(int i = 0; i &lt; MAX_PACKET_SIZE; i++)
	str_rec += strDataBuffer[i];
</code></pre>
</blockquote>
<p>Ich habe dir die Lösung doch schon gepostet:</p>
<p>str_rec.append(strDataBuffer, bytes_rec);</p>
<p>Bei deiner Schleife hast du nämlich das Problem: was passiert wenn du weniger als MAX_PACKET_SIZE an Daten bekommst? Dann füllst du mit 0 auf. Und das könnte zB deine 1,5k zuviel sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228315</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 29 Jun 2012 07:35:31 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 07:44:47 GMT]]></title><description><![CDATA[<p>Oh das habe ich komplett übersehen. Deswegen hier ein verspätetes Danke!<br />
Und was ist in dem Fall, wie du beschrieben hast, dass die Datei den char-Wert 0 enthält? Den meine Dateien sind zwar gleich groß, haben aber die md5 Summen stimmen nicht überein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228319</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Fri, 29 Jun 2012 07:44:47 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 07:55:13 GMT]]></title><description><![CDATA[<p>build schrieb:</p>
<blockquote>
<p>Oh das habe ich komplett übersehen. Deswegen hier ein verspätetes Danke!<br />
Und was ist in dem Fall, wie du beschrieben hast, dass die Datei den char-Wert 0 enthält? Den meine Dateien sind zwar gleich groß, haben aber die md5 Summen stimmen nicht überein.</p>
</blockquote>
<p>std::string kann 0 werte enthalten. Die Frage ist, wie du die Daten dann in die Datei schreibst.</p>
<p>Kommen denn die richtigen Anzahl Bytes jetzt an?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228321</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 29 Jun 2012 07:55:13 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 07:59:33 GMT]]></title><description><![CDATA[<p>Ja die angekommenen Byte passen mit den gesendeten (und der Originaldatei) überein.<br />
Das Reinschreiben übernimmt die fstream.</p>
<pre><code class="language-cpp">// pb.pData-&gt;data sind die durch recv erhaltenen Daten
// pb.pData-&gt;nlength sind die durch recv erhaltenen Anzahl an Bytes des Datensatzes
std::fstream file(filename, std::ios::out | std::ios::binary);

file.write(pb.pData-&gt;data, pb.pData-&gt;nlength);

file.close();
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2228324</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228324</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Fri, 29 Jun 2012 07:59:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 08:23:54 GMT]]></title><description><![CDATA[<p>Und wie bekommst du pData-&gt;data?<br />
Da muss ja wieder irgendwo was kopiert werden.</p>
<p>Hast du auch die Dateien korrekt als binary geöffnet und nicht als Text?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228329</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228329</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 29 Jun 2012 08:23:54 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 08:32:33 GMT]]></title><description><![CDATA[<p>Datei öffnen:</p>
<pre><code class="language-cpp">/** Unsere eigentlichen Daten */
struct PacketTransmission
{
	char *data;			// Daten an sich
	size_t nlength;			// Dateigroeße
};

FILE *fp = fopen(pb.filename.c_str(), &quot;rb&quot;);

// Dateigroese herausbekommen
fseek(fp, 0, SEEK_END);
int length = ftell(fp);
rewind(fp);

if(pb.pData == NULL)
	pb.pData = new PacketTransmission;

pb.pData-&gt;nlength = length;

pb.pData-&gt;data = new char[length];

fread(pb.pData-&gt;data, length, 1, fp);

fclose(fp);
</code></pre>
<p>Setzen eines Strings</p>
<pre><code class="language-cpp">void Packet::SetString(std::string strData)
{
	if(pb.pData == NULL)
	{
		pb.pData = new PacketTransmission;
		pb.pData-&gt;data = NULL;
	}

	if(pb.pData-&gt;data == NULL)
	{
		pb.pData-&gt;data = new char[strData.length()];
		pb.pData-&gt;nlength = strData.length();
		strcpy(pb.pData-&gt;data, strData.c_str());
	}
	else
	{
		delete pb.pData-&gt;data;

		pb.pData-&gt;data = new char[strData.length()];
		pb.pData-&gt;nlength = strData.length();
		strcpy(pb.pData-&gt;data, strData.c_str());
	}
}
</code></pre>
<p>Kann es sein, dass es daran liegt, dass ich nur ein send hab, welches mehrere MB rüberschickt und dadurch Unmengen an Fehler entstehen können?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228336</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Fri, 29 Jun 2012 08:32:33 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 09:04:00 GMT]]></title><description><![CDATA[<p>strcpy(pb.pData-&gt;data, strData.c_str());</p>
<p>hier hast du wieder das Problem mit den 0 Bytes.<br />
du brauchst hier memcpy</p>
<p>Das Problem ist, du hast keinen echten C String. Ein C String ist nämlich dadurch definiert, dass er mit einem 0 Byte beendet wird. Wenn du binärdaten überträgst ist das aber nicht gegeben und du musst immer die größe mitangeben.</p>
<p>Warum mischst du C und C++ eigentlich so?</p>
<p>PS:<br />
delete pb.pData-&gt;data;<br />
das muss<br />
delete [] pb.pData-&gt;data;<br />
lauten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228354</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Fri, 29 Jun 2012 09:04:00 GMT</pubDate></item><item><title><![CDATA[Reply to Sehr langer String on Fri, 29 Jun 2012 09:32:54 GMT]]></title><description><![CDATA[<p>Shade Of Mine schrieb:</p>
<blockquote>
<p>strcpy(pb.pData-&gt;data, strData.c_str());</p>
<p>hier hast du wieder das Problem mit den 0 Bytes.<br />
du brauchst hier memcpy</p>
<p>Das Problem ist, du hast keinen echten C String. Ein C String ist nämlich dadurch definiert, dass er mit einem 0 Byte beendet wird. Wenn du binärdaten überträgst ist das aber nicht gegeben und du musst immer die größe mitangeben.</p>
<p>Warum mischst du C und C++ eigentlich so?</p>
<p>PS:<br />
delete pb.pData-&gt;data;<br />
das muss<br />
delete [] pb.pData-&gt;data;<br />
lauten.</p>
</blockquote>
<p>Ah nochmal ein sehr sehr großes Danke! Endlich funktioniert es!<br />
Das Vermischen ist eig. im Nachhinein enstanden, da ich anfangs nur C++ genutzt habe und testen wollte, ob es evtl. am fstream / string lag.</p>
<p>MD5 stimmt jetzt auch komplett überein.</p>
<p>Nochmal ein großer Dank an alle!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2228374</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2228374</guid><dc:creator><![CDATA[build]]></dc:creator><pubDate>Fri, 29 Jun 2012 09:32:54 GMT</pubDate></item></channel></rss>