<?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[Kopie von Variabel verwenden]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>Ich hab ne Frage:</p>
<p>Ich habe eine Funktion, die mir &quot;\x0d&quot; und &quot;\x0a&quot; Zeichen aus einem &quot;char* rxBuffer&quot; ersetzt, um die Ausgabe auf einer Zeile zu behalten.<br />
Nun habe ich jedoch gemerkt, dass ich eine zweite Funktion habe, die die 2. Zeile von diesem &quot;char* rxBuffer&quot; benötigt.</p>
<p>Ich würde mein Programm gerne so umschreiben, dass ich statt die Originaldaten verändere zuerst eine Kopie von diesem &quot;char* rxBuffer&quot; mache und erst dies verändere. Jedoch auch wenn ich eine Kopie erstelle(char *copyRxBuffer) werden die Originaldaten (char *rxBuffer) verändert</p>
<p>Hier die Funktionen:</p>
<p>In dieser Funktion soll die Kopie erstellt werden und alles ersetzt werden.</p>
<pre><code class="language-cpp">BOOL CSerialPort::ReceiveData (int bytesToReceive, char *rxBuffer, unsigned long* bytesReceived)
{
	BOOL readState;

	if (hComm == INVALID_HANDLE_VALUE)
	{
		return (FALSE);
	}

	readState = ReadFile(hComm,rxBuffer , bytesToReceive, bytesReceived, NULL);

	if (m_isDebugModeEnabled == 1)
	{	char *copyRxBuffer = rxBuffer;                          //Hier versuche ich eine Kopie zu erstellen.

		  replace(&amp;copyRxBuffer, '\x0a', ' ');
		  replace(&amp;copyRxBuffer, '\x0d', ' ');

		  cout &lt;&lt; m_dateTime-&gt;DateTime() &lt;&lt;  &quot;   Fluke --&gt; PC : &quot;&lt;&lt; copyRxBuffer  &lt;&lt; endl; // Diese Ausgabe soll auf 1ner Zeile bleiben
	}

	/*&lt;&lt;timeStamp */
	return (readState);
}
</code></pre>
<p>Replace Funktion:</p>
<pre><code class="language-cpp">void CSerialPort::replace(char** buffer, char search, char replacement)
{
	if(buffer == NULL || *buffer == NULL) return;
	char* str = *buffer;
	while(*str++ != '\0')
	{
		if(*str == search) *str = replacement;
	}
}
</code></pre>
<p>Ich glaube ich habe einen kleinen überlegungsfehler gemacht, komme aber nicht dahinter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hoffe ihr könnt mir helfen.</p>
<p>Danke &amp; Gruss TTS</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/277285/kopie-von-variabel-verwenden</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 01:43:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/277285.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 16 Nov 2010 10:20:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 10:20:51 GMT]]></title><description><![CDATA[<p>Hi zusammen</p>
<p>Ich hab ne Frage:</p>
<p>Ich habe eine Funktion, die mir &quot;\x0d&quot; und &quot;\x0a&quot; Zeichen aus einem &quot;char* rxBuffer&quot; ersetzt, um die Ausgabe auf einer Zeile zu behalten.<br />
Nun habe ich jedoch gemerkt, dass ich eine zweite Funktion habe, die die 2. Zeile von diesem &quot;char* rxBuffer&quot; benötigt.</p>
<p>Ich würde mein Programm gerne so umschreiben, dass ich statt die Originaldaten verändere zuerst eine Kopie von diesem &quot;char* rxBuffer&quot; mache und erst dies verändere. Jedoch auch wenn ich eine Kopie erstelle(char *copyRxBuffer) werden die Originaldaten (char *rxBuffer) verändert</p>
<p>Hier die Funktionen:</p>
<p>In dieser Funktion soll die Kopie erstellt werden und alles ersetzt werden.</p>
<pre><code class="language-cpp">BOOL CSerialPort::ReceiveData (int bytesToReceive, char *rxBuffer, unsigned long* bytesReceived)
{
	BOOL readState;

	if (hComm == INVALID_HANDLE_VALUE)
	{
		return (FALSE);
	}

	readState = ReadFile(hComm,rxBuffer , bytesToReceive, bytesReceived, NULL);

	if (m_isDebugModeEnabled == 1)
	{	char *copyRxBuffer = rxBuffer;                          //Hier versuche ich eine Kopie zu erstellen.

		  replace(&amp;copyRxBuffer, '\x0a', ' ');
		  replace(&amp;copyRxBuffer, '\x0d', ' ');

		  cout &lt;&lt; m_dateTime-&gt;DateTime() &lt;&lt;  &quot;   Fluke --&gt; PC : &quot;&lt;&lt; copyRxBuffer  &lt;&lt; endl; // Diese Ausgabe soll auf 1ner Zeile bleiben
	}

	/*&lt;&lt;timeStamp */
	return (readState);
}
</code></pre>
<p>Replace Funktion:</p>
<pre><code class="language-cpp">void CSerialPort::replace(char** buffer, char search, char replacement)
{
	if(buffer == NULL || *buffer == NULL) return;
	char* str = *buffer;
	while(*str++ != '\0')
	{
		if(*str == search) *str = replacement;
	}
}
</code></pre>
<p>Ich glaube ich habe einen kleinen überlegungsfehler gemacht, komme aber nicht dahinter <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
<p>Hoffe ihr könnt mir helfen.</p>
<p>Danke &amp; Gruss TTS</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981115</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981115</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 16 Nov 2010 10:20:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 10:29:51 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char *copyRxBuffer = rxBuffer;
</code></pre>
<p>Du zeigst damit auf den selben Speicher! Somit änderst du das Original. Richtig wäre hier aber:</p>
<p>EDIT: Hier stand mist!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981118</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981118</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 16 Nov 2010 10:29:51 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 10:31:17 GMT]]></title><description><![CDATA[<p>Schau dir strcpy an. Dann schau dir std::string an.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981122</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981122</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 16 Nov 2010 10:31:17 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 10:40:02 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">char *p = &quot;Hello, world!&quot;;
	char a[14];
	strcpy(a, p);

	cout &lt;&lt; a;
</code></pre>
<p>Andere Möglichkeit wäre mit new/del dir neuen speicher für deinen zeiger zu reservieren und diesem dann den Wert *newpointer = *oldpointer zu übergeben.</p>
<p>std::string würde aber deutlich leichter gehen. Siehe Vorredner.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981124</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981124</guid><dc:creator><![CDATA[HighLigerBiMBam]]></dc:creator><pubDate>Tue, 16 Nov 2010 10:40:02 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 12:15:43 GMT]]></title><description><![CDATA[<p>Ich habe es so versucht:</p>
<p>HighLigerBiMBam schrieb:</p>
<blockquote>
<p>Andere Möglichkeit wäre mit new/del dir neuen speicher für deinen zeiger zu reservieren und diesem dann den Wert *newpointer = *oldpointer zu übergeben.</p>
</blockquote>
<pre><code class="language-cpp">char* copyRxBuffer = new char;
*copyRxBuffer = *rxBuffer;
replace(&amp;copyRxBuffer, '\x0a', ' ');
replace(&amp;copyRxBuffer, '\x0d', ' ');

cout &lt;&lt; m_dateTime-&gt;DateTime() &lt;&lt;  &quot;   Fluke --&gt; PC : &quot;&lt;&lt; copyRxBuffer  &lt;&lt;  endl;
</code></pre>
<p>aber im rxBuffer steht folgendes:<br />
*IDN?<br />
FLUKE, 45, 4851253, 1.6 D1.0<br />
=&gt;</p>
<p>Und nach der Zuweisung</p>
<pre><code class="language-cpp">*copyRxBuffer = *rxBuffer;
</code></pre>
<p>steht im copyRxBuffer :</p>
<p>&quot;*ýýýýð­º<br />
ð­º<br />
ð­º««««««««&quot;</p>
<p>Das macht doch kein Sinn oder? <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1981160</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981160</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 16 Nov 2010 12:15:43 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 12:21:46 GMT]]></title><description><![CDATA[<p>TTS schrieb:</p>
<blockquote>
<pre><code class="language-cpp">char* copyRxBuffer = new char;
</code></pre>
</blockquote>
<p>Hier forderst du nur Speicher für ein einziges Zeichen an, du müsstest eigentlich mindestens soviel Platz anfordern, wie rxBuffer lang ist.</p>
<p>Ums nochmal hervorzuheben: Schau dir std::string an, wenn du mit C-Strings nicht so sattelfest bist. Da gehts nämlich ganz einfach:</p>
<pre><code class="language-cpp">string rxBuffer;
...
string copyRxBuffer = rxBuffer;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1981164</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981164</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 16 Nov 2010 12:21:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 12:24:18 GMT]]></title><description><![CDATA[<p>Ja das mit den strings wurde mir schon einige male gesagt, das die leichter zu verwenden sind. Jedoch erfordert meine Funktion einen &quot;**char copyRxBuffer&quot;, wenn ich einen String verwenden würde, könnte die Funktion dann immernoch damit umgehen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981165</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981165</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 16 Nov 2010 12:24:18 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 12:30:21 GMT]]></title><description><![CDATA[<p>Meinst du deine eigene Funktion? Aber da kannst du doch die Signatur beliebig ändern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981168</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981168</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 16 Nov 2010 12:30:21 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 12:49:21 GMT]]></title><description><![CDATA[<p>Es funktioniert schon mal einigermassen. Es verwendet den richtigen buffer und schreibt mir alles schön in ein File.</p>
<p>Jedoch beim</p>
<pre><code class="language-cpp">delete copyRxBuffer
</code></pre>
<p>kackt alles ab:</p>
<p>Debug Error!</p>
<p>Programm: ..\FlukeReader\AktuelleVersion\Debug\Fluke_45_Reader.exe</p>
<p>DAMAGE: after Normal block(#112) at 0x003c24..</p>
<p>(Press Retry to debug the application)</p>
<p>Abort Retry Ignore</p>
<p>Hat schon mal jemand von euch so eine Fehlermeldung erhalten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981171</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981171</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 16 Nov 2010 12:49:21 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 12:45:39 GMT]]></title><description><![CDATA[<p>Schau dir folgendes Beispiel an und verstehe es:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{
	string rxBuffer = &quot;Hallo Welt&quot;;
	replace(rxBuffer.begin(), rxBuffer.end(), 'l', 'm');
	cout &lt;&lt; rxBuffer;
}
</code></pre>
<p>Damit kannst du dein Problem sehr einfach lösen.</p>
<p>Edit: Schau dir dazu noch das Konzept der Iteratoren an. Alles, was ich genannt habe, steht in jedem Anfängerbuch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981173</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981173</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 16 Nov 2010 12:45:39 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 12:56:12 GMT]]></title><description><![CDATA[<p>TTS schrieb:</p>
<blockquote>
<p>Ja ich meine meine eigene Funktion.<br />
Natürlich kann ich meine Funktion verändern. Jedoch habe ich keine Ahnung wie ich die umschreiben soll, das sie noch funktioniert <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>
</blockquote>
<p><em>Ächz</em><br />
Da kommt langsam die Frage auf, ob du der Aufgabenstellung überhaupt gewachsen bist... Ich habe den Eindruck, dass Codeschnipsel solange umsortiert werden, bis das Ergebnis halbwegs passt, ohne dass verstanden wird, was da überhaupt passiert.</p>
<p>Am elegantesten lässt sich das Problem mit einem Funktor erschlagen, denke ich, obwohl der TE nicht verstehen wird, was da passiert.</p>
<pre><code class="language-cpp">#include &lt;functional&gt;
#include &lt;algorithm&gt;

struct RemoveNewLine : public std::unary_function&lt;char,bool&gt;
{
   bool operator()( const char&amp; c ) const
   {
      return c == '\r || c == '\n';
   }
};

struct ReplaceNewLine : public std::unary_function&lt;char,char&gt;
{
   char operator()( const char&amp; c ) const
   {
      if( c == '\r' || c == 'n' ) return ' ';
      else return c;
   }
};

int main()
{
   std::string data = &quot;Hello\r\nWorld&quot;;

   // alle \r und \n löschen
   data.erase( std::remove_if( data.begin(), data.end(), RemoveNewLine() ), data.end() );

   // alle \r und \n durch Leerzeichen ersetzen
   std::transform( data.begin(), data.end(), data.begin(), ReplaceNewLine() );
}
</code></pre>
<p>Der erste Ansatz löscht alle Vorkommen von \n und \r indem er die Vorkommen durch die nachfolgenden Elemente überschreibt. remove_if überprüft für jedes Zeichen im Eingabestring, ob es ein \n oder \n ist, wenn ja, wird es zum Löschen markiert (ohne jetzt auf Interna einzugehen). Die Kombination von erase/remove_if entfernt jedenfalls alle Elemente, auf die das Prädikat von remove_if zutrifft.<br />
Ähnlich arbeitet transform, es ruft für jedes Element eine Funktion auf, die das Ergebnis der Operation bestimmt. Für \n und \r ist das Ergebnis ein Leerzeichen, für alle anderen Zeichen wird das Eingabezeichen zurückgegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981178</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981178</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Tue, 16 Nov 2010 12:56:12 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 13:01:45 GMT]]></title><description><![CDATA[<p>Michael E. schrieb:</p>
<blockquote>
<p>Schau dir folgendes Beispiel an und verstehe es:</p>
<pre><code class="language-cpp">#include &lt;string&gt;
#include &lt;algorithm&gt;
#include &lt;iostream&gt;
using namespace std;

int main()
{
	string rxBuffer = &quot;Hallo Welt&quot;;
	replace(rxBuffer.begin(), rxBuffer.end(), 'l', 'm');
	cout &lt;&lt; rxBuffer;
}
</code></pre>
<p>Damit kannst du dein Problem sehr einfach lösen.</p>
<p>Edit: Schau dir dazu noch das Konzept der Iteratoren an. Alles, was ich genannt habe, steht in jedem Anfängerbuch.</p>
</blockquote>
<p>Vielen Dank.. mit dem wurde mir alles klar <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1981182</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981182</guid><dc:creator><![CDATA[TTS]]></dc:creator><pubDate>Tue, 16 Nov 2010 13:01:45 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 13:18:46 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/25873">@TTS</a></p>
<pre><code>BOOL CSerialPort::ReceiveData (int bytesToReceive, char *rxBuffer, unsigned long* bytesReceived)
</code></pre>
<p>Ich versteh trotzdem nicht, warum Du einer Memberfunktion( Klasse - definitiv c++) unbedingt eine typische C-Signatur verpassen musst.<br />
Wer schreibt dir das vor? Ist die Memberfunktion statisch (Das die als FktPtr verwenden kannst) ?</p>
<p>C++ like und um Welten unkomplizierter waer :</p>
<pre><code>BOOL CSerialPort::ReceiveData(std::string &amp; Buffer)
</code></pre>
<p>(statt std::string sollt man std::vector&lt;char&gt; verwenden, wenn die Daten Null-Zeichen enthalten koennen)</p>
<p>Ciao ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981193</guid><dc:creator><![CDATA[RHBaum]]></dc:creator><pubDate>Tue, 16 Nov 2010 13:18:46 GMT</pubDate></item><item><title><![CDATA[Reply to Kopie von Variabel verwenden on Tue, 16 Nov 2010 13:25:28 GMT]]></title><description><![CDATA[<p>RHBaum schrieb:</p>
<blockquote>
<p>(statt std::string sollt man std::vector&lt;char&gt; verwenden, wenn die Daten Null-Zeichen enthalten koennen)</p>
</blockquote>
<p>Das juckt den String aber auch nicht im geringsten. Die Unterschiede sind bloß die zusätzlichen Zeichenkettenmanipulierungsmethoden von String, sowie die Überladung des Streamausgabeoperators. Theoretisch gibt es noch den Unterschied, dass bei vector&lt;char&gt; garantiert ist, dass die Elemente sequentiell im Speicher liegen, String darf theoretisch egal wie aufgebaut sein - in der Praxis irrelevant, da alle Implementierungen den String sequentiell speichern. Mit den gleichen theoretischen Überlegungen könnte man auch argumentieren, dass die garantierte sequentielle Anordnung der Vectorelemente nicht zwangsläufig heißt, dass diese von vorne nach hinten geordnet sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1981200</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1981200</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 16 Nov 2010 13:25:28 GMT</pubDate></item></channel></rss>